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 が残っています。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/10/02 17:20:30
  • 終了:2012/10/09 17:25:03

回答(5件)

id:windofjuly No.1

うぃんど回答回数2625ベストアンサー獲得回数11492012/10/02 20:41:00

ポイント20pt

(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が発行されるため片方でログアウトしても、もう片方はログアウトされません。

id:Cherenkov No.2

Cherenkov回答回数1503ベストアンサー獲得回数4932012/10/02 20:43:00

ポイント20pt

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


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

id:taroe No.3

taroe回答回数1099ベストアンサー獲得回数1322012/10/08 00:19:48

ポイント20pt

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


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

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

id:maya70828 No.5

楽1978回答回数1364ベストアンサー獲得回数1392012/10/09 06:15:18

ポイント20pt

残らない方が一般的みたいです。
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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません