.ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録

.検索

.メインメニュー

.フォーラムメニュー

.オンライン状況
14 人のユーザが現在オンラインです。 (13 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 14

もっと...

.
.リンク集

メイン
   helper,component,script
     cake1.1.18にversionアップしたらSessionが使えない?
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
takacy
投稿日時: 2007-11-3 19:58
Baker スタート
登録日: 2007-3-27
居住地:
投稿: 9
cake1.1.18にversionアップしたらSessionが使えない?
こんにちは。

表題の件でハマったのでご報告します。

先日、cakeのversionを1.1.14から1.1.18に
上げたところ、Sessionに保存した情報が
次のリクエストで取得できないという現象が発生しました。

ソースを追っかけて見たところ、session.phpの
486行目(function __startSession()内)が以下のようになっていました。

<?php
if (CAKE_SECURITY === 'high') {
  
$this->renew();
}
?>



これをコメントアウトしたら前のとおり動くようになったのですが、
上記コードの目的がよく分かりません。

ログイン処理の後にrenew()するなら分かるのですが、
セッション開始時に毎回呼んでるのはなぜ??

もし分かる方いらっしゃいましたらご教授いただければと思います。
shun
投稿日時: 2007-11-4 22:39
Cake 職人
登録日: 2006-7-14
居住地: 東京、日本
投稿: 1007
Re: cake1.1.18にversionアップしたらSessionが使えない?
面白そうな話題ですね。とりあえず変更された箇所を調べてみると、

1.1.17 __construct()の最後

<?php
$this
->__initSession();
session_cache_limiter ("must-revalidate");
session_start();
header ('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
$this->__checkValid();
}
parent::__construct();
?>



1.1.18 __construct()の最後

<?php
$this
->__initSession();
$this->__startSession();
$this->__checkValid();
}
parent::__construct();
?>



となって、今回、はじめて__startSession()が追加されたようです。その __startSession() 内では、


<?php
function __startSession() {
    if (
headers_sent()) {
        if (!isset(
$_SESSION)) {
            
$_SESSION = array();
        }
    } else {
        
session_cache_limiter ("must-revalidate");
        
session_start();
        if (
CAKE_SECURITY === 'high') {
            
$this->renew();
        }
        
header ('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
    }
}
?>


となっています。解説できる人、挙手!
SLM
投稿日時: 2007-11-5 5:52
Baker スタート
登録日: 2007-11-5
居住地:
投稿: 2
Re: cake1.1.18にversionアップしたらSessionが使えない?
https://trac.cakephp.org/ticket/3523

これではないでしょうか?
takacy
投稿日時: 2007-11-5 9:46
Baker スタート
登録日: 2007-3-27
居住地:
投稿: 9
Re: cake1.1.18にversionアップしたらSessionが使えない?
shunさん、SLMさんご回答ありがとうございます。

>https://trac.cakephp.org/ticket/3523
見てみましたが、
"This is intended behavior(仕様どおり)"とありますね。。。

う〜ん、CAKE_SECURITYが"high"だとセッション使用不可??
そんなわけないですよね〜…。
slywalker
投稿日時: 2007-11-5 12:58
Baker ユーザ
登録日: 2007-1-8
居住地: 日本 大阪
投稿: 28
Re: cake1.1.18にversionアップしたらSessionが使えない?
私もちょっとハマったので、書き込みします。

CAKE_SECURITYを"high"で運用中に
勝手にログアウトされる現象が多発!
リンク連打等、読み込み中に再アクセスするとセッションが切れる様子。

いろいろと原因を探してると、ここの記事にたどり着きました。

現在は、CAKE_SECURITYを"medium"で運用しています。

アクセス毎session_idを書き換えてセキュリティを高める目的なんでしょうかね?
しかし、毎回読み込みが完了するまで、ユーザに触らせないようにしないと使えないですね。
shun
投稿日時: 2007-11-6 11:54
Cake 職人
登録日: 2006-7-14
居住地: 東京、日本
投稿: 1007
Re: cake1.1.18にversionアップしたらSessionが使えない?
function __startSession() は、“ページの一部を出力した後は、header()が使えない”ことに対応させていますね。これのおかげで、ページの出力途中、その後でもセッションクラスをnewできるようになったようです。

SECURITYがhighだった場合、session_regenerate_id()をかけています。セッションハイジャックを防ぐなどの意味で、フレームワークとしては妥当な処理だと思いますし、


<?php
header 
('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');
?>


で、IEのセッションの扱い問題対策もしています。

ただ、こういう処理の途中で中断してしまうと、問題が起こるようです。

obAuthのコメントにも似たような事例が書いてありますね。
http://bakery.cakephp.org/articles/view/obauth-component-tutorial#comment-1546

参考:
http://jp.php.net/manual/ja/function.session_regenerate_id
http://jp.php.net/manual/ja/function.session-cache-limiter.php
shun
投稿日時: 2007-11-8 16:05
Cake 職人
登録日: 2006-7-14
居住地: 東京、日本
投稿: 1007
Re: cake1.1.18にversionアップしたらSessionが使えない?
こちらも参考になります。

CakePHP Bleeding Edge
Session high security
http://groups.google.co.jp/group/cakephp-edge/browse_thread/thread/84420b654dae7f55/

念入りなセキュリティ対策を講じるか、スピードと効率を求めるか、というバランスの問題でしょうか。
takacy
投稿日時: 2007-11-9 10:14
Baker スタート
登録日: 2007-3-27
居住地:
投稿: 9
Re: cake1.1.18にversionアップしたらSessionが使えない?
>shunさん

たくさんの参考情報ありがとうございます。

Excite翻訳先生と共にじっくり読ませていただきます。
dali
投稿日時: 2007-11-14 11:11
Baker スタート
登録日: 2007-11-14
居住地:
投稿: 2
Re: cake1.1.18にversionアップしたらSessionが使えない?
私もはまりました・・。

session.cookie_pathをコメントアウトしたら動くように
なったかと思ったのですが、
下記、cake職人さんのご指摘のように、どうも違うようです。

すみません、間違った情報のようなので訂正しました。
もう少し調べて結果わかったら投稿いたします。
ご迷惑おかけしました。
shun
投稿日時: 2007-11-16 10:20
Cake 職人
登録日: 2006-7-14
居住地: 東京、日本
投稿: 1007
Re: cake1.1.18にversionアップしたらSessionが使えない?
PHP4/PHP5 のどちらでも、

<?php
ini_set
('session.cookie_path',...
?>


でSessionがクリアされることはなさそうですね・・・。

下記、PHP4でも問題なし。(Windows XP, xampp)

<?php
session_start
();
$_SESSION['test']="1234";
ini_set('session.cookie_path','C:\Program Files\xampp\htdocs\cake');
var_dump($_SESSION);
?>

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 


. .