2

ユーザーがログアウト ボタンをクリックすると、単純にこれを行うスクリプトに接続します。

session_destroy();
session_start();

and$_SESSIONなどのすべての変数をリセットするにはこれで十分だと思いましたが、ページを再度読み込むと、セッションがまだアクティブであるかのように自動的にログインします。$_SESSION['logged']$_SESSION['username']

4

3 に答える 3

9

ドキュメントで説明されているように:

セッションに関連付けられたグローバル変数の設定を解除したり、セッション 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']存在しません。

于 2010-05-29T22:58:24.707 に答える
1

確かに、$SESSION_DESTROY(); があるだけです。$SESSION_START() なしで、単独で。ログアウトページ内?

于 2010-05-29T22:57:55.577 に答える
0

ユーザーのセッション変数を確認するには、Page_init() イベントを使用する必要があります。ページの読み込み時にユーザーのセッション変数を確認すると、アクティブなセッションとして表示されます。Page_init() イベントでユーザー セッションを確認するには、次の方法しかありません。

    protected void Page_init(object sender, EventArgs e)
    {
        if (Session["User"] == null)
        {
            Response.Redirect("home.aspx");
        }
    }

このイベントはすべてのページで使用できるため、session_destroy() を使用してセッションを破棄すると、メソッドを使用すると、ログイン ページにリダイレクトされます。

ありがとうございました

于 2012-04-26T14:12:55.570 に答える