プロが教えるわが家の防犯対策術!

PHP学習中ですがかなり苦戦しています。
やりたいことは「サイトに最後にアクセスした時点から一定期間有効なセッションをつくりたい」です。

普通のセッションだと有効期限が「セッションをつくってからX秒」になってしまうと思うのですが、これを「サイトのいずれかのページにアクセスした時点からX秒」にしたいのです。

たとえば、最初にサイトにアクセスしてもらった時点で24時間有効なセッション(というかクッキー?)を開始します。このセッションが有効な間はブラウザを閉じても再ログインが必要ないです。(←ここまではできました)
でも24時間経ってしまうと、サイトを閲覧している最中でもログアウト状態になってしまいます。これを改善したいです。

初心者でも理解可能なやり方はないでしょうか?
よろしくお願いします。

質問者からの補足コメント

  • すみません、そのやり方がわかりません。
    どういうコードになるのでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/06/14 13:24
  • もう少し詳しくお聞きしていいでしょうか?

    >* 有効ならば、セッションの最終アクセス時刻を現時刻で更新

    ↑このところですが、そこをどうすればいいのかがわかりません。
    session.cookie_lifetimeを変えればいいのでしょうか?どうもうまくいきません。よかったらライフタイムを変えるコードを教えていただけませんか?

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/06/14 18:55

A 回答 (5件)

>たとえば、最初にサイトにアクセスしてもらった時点で24時間有効なセッション(というかクッキー?)を開始します。

このセッションが有効な間はブラウザを閉じても再ログインが必要ないです。(←ここまではできました)

次回どこかのページにアクセスしたときに、セッションデータの中の期限を更新するだけです。ここまでできているということは、「24時間」を設定しているのはどのデータかは把握していますよね?

セッションデータが具体的にどの方法で格納されているかの情報がないため何とも言えませんが、PHPのセッションを使っているなら$_SESSIONだろうし、DBを使っているのであればそのDBデータの書き換え(初回はINSERTかもしれないが、次回以降はUPDATE)になるでしょう。

また、ブラウザを閉じても有効ということは、cookieそのものにも期限をつけているはずですので、上記のセッションの更新とともに、cookieの期限の更新も行う必要があるかもしれません。
    • good
    • 0

No.2の補足について



// 最終アクセス時刻と現時刻を比較
if (time() - $_SESSION['last'] > 期限) 期限切れ処理();

// セッションの最終アクセス時刻を現時刻で更新
$_SESSION['last'] = time();
    • good
    • 0

No1です。



>すみません、そのやり方がわかりません。
質問者様が現状のコードでどこかに記述しているはずですけれど・・?

>←ここまではできました
とあるので、できているのですよね?

https://www.php.net/manual/ja/function.setcookie …
https://www.php.net/manual/ja/function.session-s …
    • good
    • 0

クッキー有効期限ではなく、セッション値で独自に判断しましょう



* 初回時にセッションに "最終アクセス時刻" を作成
* アクセス毎に最終アクセス時刻と現時刻から有効かを判定
* 有効ならば、セッションの最終アクセス時刻を現時刻で更新

もう一歩進めて、初回アクセス時刻も管理すれば、
初回から一週間以内 and 最終から一日以内
などと判断できるので、更にセキュリティ向上が図れると思います
この回答への補足あり
    • good
    • 0

こんにちは



具体的な内容が不明ですが・・

>←ここまではできました
とのことですので。

自動ログインした際に、
・クッキーを更新
・セッションスタート
すれば、ご希望のようになりませんか?
この回答への補足あり
    • good
    • 0

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