N 分間滞在し、PHPSESSID を更新して変更すると、ログインしているユーザーは自然にログアウトします
さて、問題は、PHPSESSID が変更された理由が見つからないことです
session.cookie_lifetime = 0
ps:
ini_set('session.use_cookies', 1);//使用COOKIE保存SESSIONID的方式 ini_set('session.cookie_domain', 'abc.com');
thinkphp フレームワーク 3.23 を使用します
<?php 'SESSION_OPTIONS'=>array('type'=> 'db',//session采用数据库保存 'expire'=>7200,//session过期时间,如果不设就是php.ini中设置的默认值 ), 'SESSION_TABLE' =>'v4_session', //必须设置成这样,如果不加前缀就找不到数据表,这个需要注意 ?>
session は session_set_save_handler で書き換える必要があります
実際には、有効期限を 1 年後に設定していますが、保存していない他のユーザーは、 1 年後にセッションの gc がトリガーされ、セッションが強制的にリサイクルされます。
1. Redis、mysql、およびその他のデータベースを保存し、ファイルの有効期限を制御します。セッション ファイルの変更時刻を強制的に変更することで、GC をトリガーした後に他のユーザーがセッション ファイルをリサイクルできないようにします。
問題は、保存されたデータとセッションが Cookie に従うことです。セッションが期限切れではなく、Cookie 側が期限切れになり置き換えられました
しかし、本当に期限切れになるかどうかは、
session.gc_probability と session.gc_pisor 比率 (失敗確率) によって決まります。 )
thinkphp の場合、'expire'=>7200
つまり、最後のアクセスから 7200 秒 (2 時間) で期限切れになるはずです
そうでない場合は、thinkphp を諦めてください
それがプログラムであるかどうかは関係ありません、プログラムがデータベースに保存されるのは通常のことです。 7200 は有効です PHPSESSID 値が無効 (a が b に変更される) であるため、a はデータベースに存在しますが、b は存在しないため、ユーザーのセッション全体が無効です
session.cookie_lifetime=0は、手動で削除されたり、他のソフトウェアによって強制的に削除されない限り、ブラウザが閉じられたときにCookieを削除することを意味します
それは、Cookie の phpsessid 値が変更され、この phpsessid がデータベースにデータを持っていないためです
はい、問題は、システム構成が 2 時間、場合によっては 10 分、場合によっては 1 時間かかることです。PHPSESSID が再割り当てされます (同じページが常に更新されます)
理由が見つかりません
セッションとクッキーは言うのは難しいことではありませんが、言うのは簡単ではありません、それらは完璧であり、この2つは完璧に連携します。注意深く研究する必要があります。 、しかし、それは将来のトラブルを避けるでしょう
Cookie スコープの問題とアクション パスの問題もあります。 setcookie パラメータを見ればわかります。
通常はそうではありません。tp は 7200 の有効性を設定しているため、session.gc に従って処理され、7200 秒後にのみクリアされます。セッションの効率を低下させる他のプログラムが存在するかどうかを確認してください。
以前のアプローチでは、セッションが無効であると判断されても Cookie が有効ではない場合、Cookie は処理のためにセッションにコピーされます。
<?php function session($name='',$value='') { ini_set('session.gc_maxlifetime', $name['expire']); //ini_set('session.cookie_lifetime', $name['expire']);} ?>