初歩的な質問 セッション管理について
セッション処理をしたいと考えていますが、
分からない点が多く困っています。
したいと思っていることは、「ログイン」的な処理です。
訪問者がブラウザを閉じても、サイト設計者が設定した「期間」、
ログイン状態をキープさせておけるような仕様です。
※よくあるタイプです。
(特段、難しいことや変わったことをしようとしてはいません。)
ただ、ちょっと変わっている点は、ログインはパスワード無しで行います。
フォーム(POST)でボタンをクリックしたら、誰でもログインできるようなものです。
で、上記処理をする方法として、大きく分けて、
(1)クッキー($_COOKIE)を使う方法と、
(2)セッション($_SESSION)を使う方法とがあるように思っています。
(1)の方法だと、
データそのものをクライアント側に保存させるのでセキュリティ上、やや難があり、
(2)の方法だと、「キー(セッションID)」だけをやりとりするので比較的安全、
ということをよく耳にします。
ただ、パスワードを扱うわけではないので、この場合には、
(1)の方法でもアリな気がしています。
しかし、今後、パスワード形式に移行しないとも限らないので、
(2)を使った方法で話を進めたいと思います。
パスワードのやりとりがないのなら、(1)の方が断然楽でいいよ~
ということであれば、話は変わってきます。
その場合には教えて下さい。
(※質問文の中で、私は随所に変なことを言っている可能性がありますので、
適宜、ご指摘頂けると嬉しく思います。)
話を戻しまして、
ここからは、前述の(2)の方法で話を続けさせて頂きます。
セッション処理の流れについてですが、
セッションIDをクライアントに送りつけ、保存させる方法は、
session_start()をスクリプト先頭に書き、
$_SESSION['login'] = 'おまえはもう、ログインしてる…。';
と、どこかに書くことで、
この$_SESSION['login']値を保持している間、訪問者は、
サイト内のページを、ログインされた状態として閲覧できる
と、私は考えています。
何か変なことを言っていましたら、ご指摘下さい。(★ポイント1)
//-----------------------------------
次に、セッション保持期間の設定の方法についてですが、
ネット上で調べた所、
ini_set("session.gc_maxlifetime", "1440");
のように設定できると書いてありました。
このini_set()による設定が、どう作用するのか、
この点もよく分からずにいます。(★ポイント2)
session.gc_maxlifetimeの設定自体は、スクリプト終了とともに、
Master Valueに戻されるようですが(PHPマニュアルより)、
私が気になっているのは、
そのスクリプトで生成したセッションの保持期間は、どうなっているのか?
ということです。
ちょっと乱暴な書き方をしますが、
例えば、
php.ini上(つまり、Master Valueの設定値)では、
session.gc_maxlifetime:1440
というような設定 の場合に、
スクリプトAの中で、
ini_set("session.gc_maxlifetime", "~仮に24時間としておきます~");
のように書き、
そのあとに、
$_SESSION['login'] = 'おまえはもう、ログインしてる…。';
と書いた場合、
クライアントには、$_SESSION['login']のデータは24時間保持される、
ということでしょうか。
つまり、
スクリプト内に書いた、
ini_set("session.gc_maxlifetime", "~仮に24時間としておきます~");
という記述は、
そのスクリプトでセッションIDをクライアントに与える場合の「そのセッションIDの保持期間」のみ
を設定できる、という理解でよろしいでしょうか。
当たり前のことをお聞きしているかもしれませんが、
どなたか、どうか、よろしくお願い致します。
補足
回答有難う御座います。 タイムアウトに関して何もしてなかったら、2、3時間放置でセッション情報が消えていました。 タイムアウトしたのだろうと思いphp.iniを調べたところ質問させて頂いた疑問にぶつかりました。 デフォルト設定のままで、長時間放置するとセッションが無くなるのは確認済みです。 セッションのタイプアウトを制御するシステム変数がsession.gc_maxlifetime では無いのかもしれませんね。