ホームページ >バックエンド開発 >PHPチュートリアル >session_destroy() はすぐには有効になりません
PHP ページにリンクするには、HTML で 3499910bf9dac5ae3c52d5ede7383485 を使用します。PHP ページはセッションを破棄しますが、ページを開いたときにセッションを破棄するには、PHP ページを再度更新する必要があります。このページには 2 つのステートメントのみがあります: $_SESSION = array();session_destroy(); session_start() が開かれました。
状況は何ですか?
ユーザーにとって、session_destroy() は Cookie 内のセッション ID をログアウトする命令を送信するだけだからです
a.php
<?phpsession_start();$_SESSION['name'] = "kobe";?><a href="se2.php">se2</a>
b.php
<?phpsession_start();$_SESSION = array();session_destroy();var_dump($_SESSION['name']);?>
最初にアクセスすると、a.php -> b.php -> セッションが消えます。
a.php
<?phpsession_start();$_SESSION['name'] = 'fdipzone';?><a href="b.php">go b</a>
<?phpsession_start();session_destroy();?><a href="login.php">go login</a>
<?phpsession_start();echo 'name='.$_SESSION['name'];?>
while(true) { echo "\n"; ob_flush(); flush(); if(connection_aborted()) exit; /*这里是将当前时间写入到数据库*/ sleep(30);}
ここで ob_flush();flush(); を削除すると問題は解決しますが、この場合 connection_aborted() は有効にならず、ユーザーがページを閉じた後も時刻は更新され続けます。 。しかし、これらの 2 つの文を追加すると、セッションを破棄できなくなり、手動で f5 キーを押して削除する必要があります
これを解決するにはどうすればよいですか?
?なぜ死のサイクルを止めなければならないのでしょうか?
ユーザーが常にオンラインの場合、データベースへのログイン時刻を更新します。
その後、ページは実際には決して終了せず、もちろん現在のセッションは消えません。
connection_aborted() 文はクライアントが切断されているかどうかを確認できますが、その実行にはページにコンテンツを出力する必要があるため、ob_flush();flush();
問題は、これら 2 つの文によりページがセッションを破棄することです。つまり、セッションを手動で更新してセッションを破棄する必要があります
その後、ページは実際には決して終了せず、もちろん現在のセッションは消えません。
connection_aborted() 文はクライアントが切断されているかどうかを確認できますが、その実行にはページにコンテンツを出力する必要があるため、ob_flush();flush();
実際、ページは決して終了せず、もちろん現在のセッションは消えません。
connection_aborted() 文はクライアントが切断されているかどうかを確認できますが、その実行にはページにコンテンツを出力する必要があるため、ob_flush();flush();
問題は、これら 2 つの文によりページがセッションを破棄することです。つまり、セッションを破棄するには手動で更新する必要があります
それでは、クライアントが切断されたときにこのループを閉じる他の方法はありますか。それともセッションを破棄するページを正常に実行する他の方法はありますか?
この問題は ob_flush();flush(); によって引き起こされますか?私たちは何をすべきか?
ユーザーが長期間ログインしない場合にオフラインに追い出されるのを防ぐためにこれを行っています。他に方法はありますか?