ホームページ  >  記事  >  バックエンド開発  >  PHPSESSIDの有効期限の問題

PHPSESSIDの有効期限の問題

PHP中文网
PHP中文网オリジナル
2017-05-20 13:24:244993ブラウズ

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
&#39;SESSION_OPTIONS&#39;=>array(&#39;type&#39;=> &#39;db&#39;,//session采用数据库保存		
&#39;expire&#39;=>7200,//session过期时间,如果不设就是php.ini中设置的默认值	  
),	
&#39;SESSION_TABLE&#39;	=>&#39;v4_session&#39;, //必须设置成这样,如果不加前缀就找不到数据表,这个需要注意
?>

session は session_set_save_handler で書き換える必要があります
実際には、有効期限を 1 年後に設定していますが、保存していない他のユーザーは、 1 年後にセッションの gc がトリガーされ、セッションが強制的にリサイクルされます。
1. Redis、mysql、およびその他のデータベースを保存し、ファイルの有効期限を制御します。セッション ファイルの変更時刻を強制的に変更することで、GC をトリガーした後に他のユーザーがセッション ファイルをリサイクルできないようにします。

問題は、保存されたデータとセッションが Cookie に従うことです。セッションが期限切れではなく、Cookie 側が期限切れになり置き換えられました

session.gc_maxlifetime = 1440; 最後のアクセスから 1440 秒後に期限切れになるように指定します

しかし、本当に期限切れになるかどうかは、
session.gc_probability と session.gc_pisor 比率 (失敗確率) によって決まります。 )

thinkphp の場合、'expire'=>7200
つまり、最後のアクセスから 7200 秒 (2 時間) で期限切れになるはずです
そうでない場合は、thinkphp を諦めてください



それがプログラムであるかどうかは関係ありません、プログラムがデータベースに保存されるのは通常のことです。 7200 は有効です PHPSESSID 値が無効 (a が b に変更される) であるため、a はデータベースに存在しますが、b は存在しないため、ユーザーのセッション全体が無効です

サーバー上のセッションが無効であり、Web ページ更新され、もちろん再割り当てされます セッションIDを取得しました

session.cookie_lifetime=0は、手動で削除されたり、他のソフトウェアによって強制的に削除されない限り、ブラウザが閉じられたときにCookieを削除することを意味します

これが正しいかどうかはわかりません、PHPSESSIDが渡されますクライアントは Cookie に基づいてユーザーの一意性を判断するために使用されます。Cookie が 0 秒に設定されている場合、クライアントに phpsessid がない場合、サーバーは当然 phpsessid を再割り当てします。ログアウトされます。


サーバーセッションは期限切れになっておらず、データベースは保存されています。 。 。

それは、Cookie の phpsessid 値が変更され、この phpsessid がデータベースにデータを持っていないためです

はい、問題は、システム構成が 2 時間、場合によっては 10 分、場合によっては 1 時間かかることです。PHPSESSID が再割り当てされます (同じページが常に更新されます)
理由が見つかりません


セッションとクッキーは言うのは難しいことではありませんが、言うのは簡単ではありません、それらは完璧であり、この2つは完璧に連携します。注意深く研究する必要があります。 、しかし、それは将来のトラブルを避けるでしょう

このように session_id($_COOKIES['sess_id']) が引き継がれないかどうかを確認してください

Cookie スコープの問題とアクション パスの問題もあります。 setcookie パラメータを見ればわかります。

通常はそうではありません。tp は 7200 の有効性を設定しているため、session.gc に従って処理され、7200 秒後にのみクリアされます。セッションの効率を低下させる他のプログラムが存在するかどうかを確認してください。

以前のアプローチでは、セッションが無効であると判断されても Cookie が有効ではない場合、Cookie は処理のためにセッションにコピーされます。

問題が見つかりました

<?php 
    function session($name=&#39;&#39;,$value=&#39;&#39;) {            
    ini_set(&#39;session.gc_maxlifetime&#39;,   $name[&#39;expire&#39;]);            
    //ini_set(&#39;session.cookie_lifetime&#39;,  $name[&#39;expire&#39;]);}
?>

セッションCookieの有効期間を書き換えるのはTPであり、セッションIDがCookieの有効期間中に設定したパラメータになります

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。