RSS

ブラウザを閉じたらセッションを破棄する

13 1月

はいっ!9時までにアップしますよ!ってことで今日ついったーでも同じ記事が流れたけど自分的メモ。
やりたいこと。

  • ブラウザを閉じたらログイン情報を破棄する
  • まずはapp/core.phpの中身を確認。ここいらがポイントか。

    Configure::write('Session.save', 'cake');
    Configure::write('Session.timeout', '120');
    Configure::write('Security.level', 'middle');
    

    Security.levelの値と、セッションのタイムアウト時間によって実際のタイムアウト時間が設定される。で、Security.levelが mediumの場合、ブラウザを閉じてもセッション情報は削除されない。そりゃこまる。というわけでhighにしたいんだけど、highにすると色々不具合がでるんだよね…。なので実運用もmediumでやるしかないんじゃないかと思ったり思わなかったり。
    cake/libs/session.phpを見ると

    		switch ($this->security) {
    			case 'high':
    				$this->cookieLifeTime = 0;
    				if ($iniSet) {
    					ini_set('session.referer_check', $this->host);
    				}
    			break;
    			case 'medium':
    				$this->cookieLifeTime = 7 * 86400;
    				if ($iniSet) {
    					ini_set('session.referer_check', $this->host);
    				}
    			break;
    			case 'low':
    			default:
    				$this->cookieLifeTime = 788940000;
    			break;
    		}
    

    ほいほい、mediumだとcookieLifeTime が結構長いのね。あ、っていうかhighは0なのか。だからブラウザ破棄=クッキー破棄なんだな。というわけで、ここを0にしちゃえ…っていうのはNGだそうです。cakeフォルダの中身はいじくっちゃだめ>< というルールに基づき検索すると。

  • /app/config/hoge.phpを作成する。
  • hoge.phpに以下を記載(ソース1)
  • /app/config/core.phpの以下の部分を変更(ソース2)
  • ソース1

    ini_set('session.use_trans_sid', 0);
    ini_set('url_rewriter.tags', '');
    ini_set('session.serialize_handler', 'php');
    ini_set('session.use_cookies', 1);
    ini_set('session.name', Configure::read('Session.cookie'));
    ini_set('session.cookie_lifetime', 0);//ここだけ変更したのであった。
    ini_set('session.cookie_path', $this->path);
    ini_set('session.auto_start', 0);
    ini_set('session.save_path', TMP . 'sessions');
    

    ソース2

    //Configure::write('Session.save', 'cake');変更前
    Configure::write('Session.save', 'hoge');//変更後
    

    これでブラウザを落とすとログイン情報が削除される。だがしかし一点注意。今まで単純にmediumだった状態から確認したい場合、一度クッキーを全て削除しないといけない。なんでかっていうとクッキーの有効期限はデフォルト設定のmediumだったときの7日間?となっている。一度消さないと反映されないのがポイント。私の場合は

  • Fire Fox:web developer(プラグイン)を使って削除した。ちなみに「セッションクッキー」といわれるものも全て削除。
  • IE:一時ファイルを全て削除だけだと反映されない。
  • IEの場合はC:\Documents and Settings\Username\Local Settings\Temporary Internet Filesの中身を全部けしたほうがいい。一時ファイルをツール>インターネットオプションから消してもだめだった。手動で消すほうが確実。

    これであなたもブラウザを落としたらセッションきれますYO!

    広告
     
    1件のコメント

    投稿者: : 1月 13, 2010 投稿先 cakephp

     

    ブラウザを閉じたらセッションを破棄する」への1件のフィードバック

    コメントを残す

    以下に詳細を記入するか、アイコンをクリックしてログインしてください。

    WordPress.com ロゴ

    WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

    Twitter 画像

    Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

    Facebook の写真

    Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

    Google+ フォト

    Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

    %s と連携中

     
    %d人のブロガーが「いいね」をつけました。