ユーザーがログアウト ボタンをクリックすると、単純にこれを行うスクリプトに接続します。
session_destroy();
session_start();
and$_SESSION
などのすべての変数をリセットするにはこれで十分だと思いましたが、ページを再度読み込むと、セッションがまだアクティブであるかのように自動的にログインします。$_SESSION['logged']
$_SESSION['username']
ドキュメントで説明されているように:
セッションに関連付けられたグローバル変数の設定を解除したり、セッション Cookie を設定解除したりすることはありません。セッション変数を再度使用するには、session_start() を呼び出す必要があります。
ユーザーをログアウトするなど、セッションを完全に強制終了するには、セッション ID も設定解除する必要があります。Cookie を使用してセッション ID を伝達する場合 (デフォルトの動作)、セッション Cookie を削除する必要があります。そのために setcookie() を使用できます。
また、その方法の例も示します。
<?php
// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();
// Unset all of the session variables.
$_SESSION = array();
// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
// Finally, destroy the session.
session_destroy();
?>
ユーザーをログアウトするには、アレイをクリアするだけで十分です。それらは同じセッション ID を持ちますが、$_SESSION
空になるため$_SESSION['logged']
、$_SESSION['username']
存在しません。
確かに、$SESSION_DESTROY(); があるだけです。$SESSION_START() なしで、単独で。ログアウトページ内?
ユーザーのセッション変数を確認するには、Page_init() イベントを使用する必要があります。ページの読み込み時にユーザーのセッション変数を確認すると、アクティブなセッションとして表示されます。Page_init() イベントでユーザー セッションを確認するには、次の方法しかありません。
protected void Page_init(object sender, EventArgs e)
{
if (Session["User"] == null)
{
Response.Redirect("home.aspx");
}
}
このイベントはすべてのページで使用できるため、session_destroy() を使用してセッションを破棄すると、メソッドを使用すると、ログイン ページにリダイレクトされます。
ありがとうございました