-1

私のウェブサイトには、page1.php、page2.php、page3.php、page4.php、logout.php の 5 つのページがあります。

page4.php にはログイン フォームがあり、その上には、ログイン フォームからのユーザー入力をキャッチしてセッションに入れ、(header(' を使用して) 元のサイトのページにユーザーをリダイレクトするための php スクリプトがあります。 location: '.$_SESSION['page']);) 、または彼がどのページからも来なかった場合、つまり、彼が最初に訪れたページが page4.php である場合は、彼を page1.php にリダイレクトします。一番上には session_start(); があります。

Page1.php 、 page2.php および page3.php コード:

<?php
 session_start();
 $_SESSION['page'] = $_SERVER['PHP_SELF'];
 // also have a link to click to go to page4.php if not logged in and a link to   
 //logout.php
?>

logout.php のコード:

<?php 
session_start();
session_destroy();
header('location: '.$_SESSION['page']);
?>

問題は、ユーザーがログアウト リンク logout.php をクリックすると、すべてのセッションが破棄され、元のページにリダイレクトされ、再び $_SESSION['page'] が設定され、すべてのページが閉じられても破棄されないことです。次回、ユーザーが最初に page4.php にアクセスしてログインすると、前回サイトにアクセスしたときのページにリダイレクトされます。ユーザーがすべてのページを閉じた場合 (サイトページの複数のタブが開いていた場合)、 page4.php に初めてアクセスすると、page1.php にリダイレクトされます。サイトのすべてのページが閉じられている場合にのみセッションを破棄するにはどうすればよいですか?

4

3 に答える 3

1
<?php 
session_start();
$temp = $_SESSION['page'];
$_SESSION = array();
session_destroy();
header('location: '. $temp);

?>

ログアウト後に古いページを使用しないように、セッション データをクリアする必要があることを理解しています。

セッションを正しく終了する方法の PHP.net の例:

于 2012-12-16T08:58:24.433 に答える
0

ユーザーが最初にサイトにログインしたときに、新しいセッションを設定する前に、最初にすべてのセッションを破棄するのは理にかなっていませんか? 前のページから何も必要としない限り、ロードされた新しいページごとに同じことが言えます。明らかに、ログイン セッションが必要になるため、そのセッションを破棄しません。

于 2012-12-16T08:55:43.697 に答える
-1

session_unset()すべてをクリアするために使用します$_SESSION。特定の$_SESSION変数については、unset($_SESSION['whatever'])

于 2012-12-16T08:53:40.030 に答える