電子書籍の厳選無料作品が豊富!

phpで会員制サイトの制作を勉強中です。
pdoでmysqlデータベースに接続しています。

セッションの「session_set_cookie_params」について質問ですが、
session_set_cookie_paramsで有効期限を設定する場合、
ログイン時にsession_set_cookie_paramsでセッションの有効期限を設定し、
他のページではsession_start()さえ記述すれば、
有効期限を過ぎると勝手にセッション変数のデータを空にしてくれるのでしょうか?
それとも全てのページにsession_set_cookie_paramsを書かなければならないのでしょうか?
プログラムを書いている上でセッションの動作がおかしい(有効期限が過ぎてもログアウトしない)のでsession_set_cookie_paramsの記述がおかしいのかと思い、質問しました。

また、セッション変数の有効期限を変数毎に個別に設定して削除する方法はないのでしょうか?

ご回答、よろしくお願いします。

A 回答 (3件)

…あー、でも



>> phpで会員制サイトの制作を勉強中です。

会員制サイトだったらセッションフィクセーション攻撃対策のため、ログイン直後の

session_regenerate_id(true);

の実行は必須であり、このタイミングで再度必ずCookieが送信されますね。だったら

session_set_cookie_params(...);
session_start();
session_regenerate_id(true);

の順番でログインするページにだけ書いておけば問題ないと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
なるほど、確かによく使用するセッション関連は関数化しておいた方が賢明ですね。
また、よくよく考えるとほとんどの会員サイトはアクションがある毎にセッションの有効期限を延長していると思いますので、session_start()毎にsession_set_cookie_params()を設定した方が良さそうですね。
セッション変数の有効期限を変数毎に個別に設定して削除する方法は少しややこしそうですね…でも参考にさせて頂きます!
また、session_regenerate_id(true)についてもご指摘くださり、ありがとうございます!

お礼日時:2014/11/16 20:16

以下に詳しくまとめてあります。



リクエストパラメータ・セッションに関するまとめ
http://qiita.com/mpyw/items/7852213f478e8c5a2802

>> ログイン時にsession_set_cookie_paramsでセッションの有効期限を設定し、
>> 他のページではsession_start()さえ記述すれば、
>> 有効期限を過ぎると勝手にセッション変数のデータを空にしてくれるのでしょうか?
>> それとも全てのページにsession_set_cookie_paramsを書かなければならないのでしょうか?

初めてユーザがアクセスしてくる段階で session_set_cookie_params + session_start が両方コールされれば、期待している動作になります。逆に、Cookieがセットされた2回目以降のアクセスでは session_set_cookie_params は影響を及ぼしません。

しかし、どのページでCookieが送信されるかは分かりません。送信されるのは、ユーザが「Cookieの無い状態で初めてアクセスしてきたsession_startのあるページ」となります。そのため、session_startを使用している全ての箇所にsession_set_cookie_paramsも書くべきです。私なら関数化しておきますね。

>> また、セッション変数の有効期限を変数毎に個別に設定して削除する方法はないのでしょうか?

セッションの有効期限を(有効期限を短くするほかのどれよりも)長く確保し、「前回のアクセスを記録しておくセッション変数」を定義します。2回目以降にアクセスしてきたときと比較し、その差が指定した値よりも大きければ自分でunset構文を使って削除する…という実装にするしかないですね。
    • good
    • 0

ログインしてから1時間など決め打ちで有効にしたいのであれば


ログインした直後に1回セットすればいいし、
ページが遷移するたびにログイン時間を延長したいのであれば
(つまり○○分以上アクセスがないとセッションがきれる)
ページごとに書かなくてはならないでしょう

クッキーではセッションIDが管理されているので
expiresでセッションIDがクリアされてしまえば次のアクセス時に
セッションが引き継げなくなります。

またサーバー側でユーザーDBで管理しておけば
特定ユーザーから想定日時以降のアクセスがあったときに
はじくような処理は可能でしょう
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
なるほど、一般的な会員制サイトは恐らく
ページ遷移ごとにログイン時間を延長してるのでしょうね。
expiresは初耳なので調べてみます!

お礼日時:2014/11/16 20:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!