質問: 'おまえはもう、ログインしてる...。'; と書いた場合、 クライアントには、$_SESSION['login']のデータは24時間保持される、 ということでしょうか。 つまり、 スクリプト内に書いた、 ini_set("session.gc_maxlifetime", "~仮に24時間としておきます~"); という記述は、 そのスクリプトでセッションIDをクライアントに与える場合の「そのセッションIDの保持期間」のみ を設定できる、という理解でよろしいでしょうか。 当たり前のことをお聞きしているかもしれませんが、 どなたか、どうか、よろしくお願い致します。
回答: ■セッションが引かれているかどうか これの意図するところは、会員サイトなので、IDとパスなどの認証が通っているかどうかをチェックするという意味合いです。 ここらへんの実装は、ここで掘り下げなくても、理解されていますね。 ■(2)と(3)の違い COOKIEにセッションIDが残ってて、ブラウザがソレを通知してきたタイミングで、gc_maxlifetimeに到達はしているものの、GCが発動していなかった場合、ログイン後の遷移が行われてしまう可能性がありますので、プログラム側で、明示的にチェックしてやる必要があると思われます。 ■セッションファイルと、その中の値であるセッション変数の関係 セッションファイルというのは、(ファイルベースの)データベースです。 実際に明示的に記述することはあまりないかもしれませんが、 session_write_closeという関数があり、セッションファイルに$_SESSION変数で保持した値を(セッションファイルに)書き込んで閉じます。これは、session_startをしていれば、スクリプト終了後に自動的に呼ばれるものです。 SQLなデータベースであれば、INSERT文やUPDATE文で行うようなことを、自動的にやってくれてるわけです。 で、session_destroyというのは、セッションを閉じるのではなくて削除します。DELETE文でテーブルやレコードを削除するのに近いですね。 ■(A)の過程は、(B)をするのであれば、必要ない処理なのか session_destroyしても、$_SESSION変数はunsetされるわけではないですので、session_destroy関数が叩かれた後も、$_SESSION変数に値が残ってますので、 $_SESSION = array(); として、リセットしたほうが良いかと思います。 ■セッションが閉じられても、クッキーの有効期限が残っている場合 サーバ側にセッションが残ってないので、クッキーの有効期限が残っていても認証がされてしまうことはないと思いますが、ブラウザから無駄な通信が行われることもありますし、それ以外の何らかの予期せぬ出来事があるかも分かりませんので、削除したほうが良いのではないでしょうか。 大体のことが分かったら、後はオープンソースのログイン認証が行われるアプリケーションなどの実装を見てみるとノウハウ的な部分は分かると思います。 ECCUBE、WordPress、XOOPS、などなど。 他にも、 こちらで紹介されているようなユーザ認証部分だけのクラスライブラリなどもあったりします。