![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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の記述がおかしいのかと思い、質問しました。
また、セッション変数の有効期限を変数毎に個別に設定して削除する方法はないのでしょうか?
ご回答、よろしくお願いします。
No.3ベストアンサー
- 回答日時:
…あー、でも
>> phpで会員制サイトの制作を勉強中です。
会員制サイトだったらセッションフィクセーション攻撃対策のため、ログイン直後の
session_regenerate_id(true);
の実行は必須であり、このタイミングで再度必ずCookieが送信されますね。だったら
session_set_cookie_params(...);
session_start();
session_regenerate_id(true);
の順番でログインするページにだけ書いておけば問題ないと思います。
ご回答ありがとうございます!
なるほど、確かによく使用するセッション関連は関数化しておいた方が賢明ですね。
また、よくよく考えるとほとんどの会員サイトはアクションがある毎にセッションの有効期限を延長していると思いますので、session_start()毎にsession_set_cookie_params()を設定した方が良さそうですね。
セッション変数の有効期限を変数毎に個別に設定して削除する方法は少しややこしそうですね…でも参考にさせて頂きます!
また、session_regenerate_id(true)についてもご指摘くださり、ありがとうございます!
No.2
- 回答日時:
以下に詳しくまとめてあります。
リクエストパラメータ・セッションに関するまとめ
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構文を使って削除する…という実装にするしかないですね。
No.1
- 回答日時:
ログインしてから1時間など決め打ちで有効にしたいのであれば
ログインした直後に1回セットすればいいし、
ページが遷移するたびにログイン時間を延長したいのであれば
(つまり○○分以上アクセスがないとセッションがきれる)
ページごとに書かなくてはならないでしょう
クッキーではセッションIDが管理されているので
expiresでセッションIDがクリアされてしまえば次のアクセス時に
セッションが引き継げなくなります。
またサーバー側でユーザーDBで管理しておけば
特定ユーザーから想定日時以降のアクセスがあったときに
はじくような処理は可能でしょう
ご回答ありがとうございます!
なるほど、一般的な会員制サイトは恐らく
ページ遷移ごとにログイン時間を延長してるのでしょうね。
expiresは初耳なので調べてみます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPのセッション有効期限について 5 2023/06/14 12:40
- PHP PHPで訪問回数を表示するカウンタを作成したい 3 2023/05/27 07:09
- 弁護士・行政書士・司法書士・社会保険労務士 ★行政書士試験の民法についての質問になります。 物権変動についての質問になります。 問 不動産の取得 1 2023/05/24 19:36
- Chrome(クローム) 【Google】「同期は有効です」と表示されているがブックマークが同期されていない 2 2022/11/17 13:32
- WordPress(ワードプレス) wordpressでphpを読み込みたい 1 2022/10/30 23:40
- Chrome(クローム) Cookieを削除 他サイトでの自動ログインなどの設定も削除されますか パソコン クロームです 1 2022/09/10 21:47
- その他(ブラウザ) 最近、いろいろなブラウザでログインができません。 2 2022/03/29 00:04
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- その他(Microsoft Office) Excelの関数(FILTER関数)について教えてください 2 2023/07/31 16:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ブラウザを閉じた後もセッショ...
-
ログイン画面をはさんだ後、自...
-
PHPSESSIDについて
-
URLのパラメータをGETのままで...
-
$_SESSIONと、POSTやGETの違い
-
「取得先」という表現について
-
Dosブロンプトでtabを出力したい
-
wordの差し込み印刷で文字...
-
DTOとEntityの差は何ですか。
-
excel access連携 このテーブル...
-
【C#】DataGridViewの最大列数...
-
phpでcookieがうまく保存されない
-
小数点以下0の非表示
-
format関数について
-
Excel VBA:特定の文字列以降(...
-
ミュージックのアートワークを...
-
バッチファイルでpingの結果を...
-
1ヶ月後の日付を出力したい
-
WordでExcelデータを差込...
-
switch()文で値の大小比較
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
URLのパラメータをGETのままで...
-
PHPのセッション有効期限について
-
セッション変数にパスワードを...
-
複数のサーバで運営する場合の...
-
ログインしたら他からログイン...
-
ブラウザを閉じた後もセッショ...
-
セッションを維持したまま、サ...
-
PHP SESSION変数を複数使用でき...
-
session_start()で生成されるセ...
-
HTTPヘッダー内での順番などに...
-
「ログイン機能を持たせる」説...
-
session_regenerate_id
-
Sessionの上限について
-
初歩的な質問 セッション管理に...
-
$_SESSIONと、POSTやGETの違い
-
ログイン画面をはさんだ後、自...
-
セッション変数の命名規則
-
複数ページでセッションを使わ...
-
セッション ID とセッション名...
-
セッションのスコープ(有効範...
おすすめ情報