人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPのsession に関する質問です。chrome (バージョン 22.0.1229.79 m) とfirefox(15.0.1) IE(9.0.10) とsession の扱いが異なるようです。設定の問題かもしれないのですが、関連情報ありましたら、引用での回答お願いします。現象は、chrome では、ブラウザを閉じてもsession情報が残り、firefox,IE では消えます。ブラウザを閉じたときの挙動がかわることはあるのでしょうか? コード的には、session_start();$_SESSION['id']=1; でセッションをはじめて、session_start();print_r($_SESSION); で確認できます。chrome は、ブラウザを閉じても、セッションに格納した $_SESSION['id']=1 が残っています。

●質問者: kaiketsu
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● うぃんど
●20ポイント

(1)chromeの設定によってはcookieが残り続けます。

phpのセッションIDはブラウザのcookieに格納されており、
有効期限Expireも設定されているのだけど、
chrome の設定によってはExpireが有効に働かない。
http://www.sakataya.sakura.ne.jp/wp/?p=34

IEやらFireFoxでやってみると、cookieをセットしてブラウザ落としたら
ちゃんと削除されてる。

chromeで検証してたらあら不思議。
ブラウザを落とせど落とせども、sessionのcookieは消えない。

ブラウザを起動した際に、中断した箇所から
続けるという設定をしていたのだが、この設定によってsessionという概念は
なくなっており、expires=sessionのcookieは削除されずにすんでいたわけだ。


(2)phpのセッション有効期限にも落とし穴があります。

引用を求めておられるので一部引用にしますが、
有益な情報が満載なので、必ずリンク先を参照してください。
http://pentan.info/php/session_gc.html

セッションの破棄されるタイミング

ガベージコレクト(ガベージコレクション、ガーベッジコレクション、ガーベッジコレクタともいわれます)とは、『ごみ拾い』という意味です。

session_start()が行われたときに、session.gc_probabilityを分子、session.gc_divisorを分母とする確率で、 session.gc_maxlifetimeよりファイル更新日付の古いファイルをsession.save_pathから削除します。

デフォルトでは、1/100の確率で、24分より古いセッションファイルが消えます。

セキュアなセッションの使い方
ログイン処理

クッキーでセッションIDが送られてきてるかもしれないので、 ログインなどでセッションに値を入れ始める前にセッションIDを変更する。


session_regenerate_id(true);

引数にtrueを入れると、既に入っている値も削除されます。
ログアウト処理

session_destroy();としても、それ以降でセッション変数が残っているのでこの値をリセットする。

session_unset();

または

$_SESSION = array();

このセッションIDがクッキーに残るのでクッキーを消す。

setcookie(session_name(), '', time() - 3600, "/");

その他
SSLのページから非SSLのページへは、同じサーバーであれば同じセッションIDで値を引き継ぐことはできますが、絶対にやってはいけません。
どうしてもやらざる得ないときには、都度セッションIDを変更したほうが安全です。
ユーザーページと管理ページが同じドメインのとき

session_name('admin');

上記のようにして、どちらかのセッション名を変更すると別々のセッションIDが発行されるため片方でログアウトしても、もう片方はログアウトされません。


2 ● Cherenkov
●20ポイント

設定] > [詳細設定を表示] > [コンテンツの設定] > [ブラウザを終了するまでローカル データを保存する]
にチェックすると、中断した箇所から続けてもsessionのcookieは消えました
chromeのsession cookie | げんげんブログ


javascript - Chrome doesn’t delete session cookies - Stack Overflow


3 ● taroe
●20ポイント

ブラウザ毎の新たに新規起動した際のセッションクッキーの扱いの比較
http://tmizuno3.cocolog-nifty.com/blog/2009/11/post-d032.html


----------
ブラウザ側のクッキーの動作の問題なので
サーバー側ではほとんど何もできません。

-------------
chromeの場合は、タブごとにプロセスが別なので
そういうのもあって、質問文のような動作がデフォルトになってるのではないでしょうか?


4 ● みかん
●20ポイント

http://pentan.info/php/session_gc.html


5 ● 楽1978
●20ポイント

残らない方が一般的みたいです。
http://oshiete.goo.ne.jp/qa/3006476.html

セッション保存を行うのとは別の目的による保存と見られるため…なのか履歴には残らないですね。ま、一般的な挙動だとは思いますが

http://www.phppro.jp/qa/1035

他のCookieは物理的にファイルとしてブラウザが管理するフォルダに格納されるのですが、セッションクッキーはそういうことはなく、ブラウザが閉じられるとデータが消えるって仕組みになっています。

Chromeはシークレット モードがあるからではないでしょうか
https://www.google.com/intl/ja/chrome/browser/features.html#privacy
ブラウザ限りのセッションにおけるブラウザ毎の挙動
http://blog.rutake.com/blog/techmemo/2007/10/post_25.html
その他参考サイト
http://pentan.info/php/session_gc.html
http://www.lifehacker.jp/2012/02/120221chromefirefox.html

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ