2

ユーザーのセッションを終了し、システムからログアウトして、ログインページに戻すことになっているスクリプトを作成しています。

私のログアウトスクリプトは次のようになります。

<?php

$_SESSION['signin'] = null;

session_destroy();

header("Location: /test/index.php");

?>

最初は、セッションが破棄されていなくても、変数をそのようにリセットしsigninて、ユーザーがログアウトしているとシステムが判断できるように、変数を少なくとも変更する必要があります。

また、ログインページの上部に、ログイン済みの場合はホームページに転送する条件があります。これにより、ログイン後にログインページにアクセスできなくなります。この部分は次のようになります。

<?php
session_start();
if($_SESSION['signin'] == 5)
{
        header("Location: /test/home.php");
}
?>

つまり、誰かがログインし、リンクをクリックしてログアウトすると、最初のコードブロックを使用してログアウトし、コードの2番目のブロックを含むページに転送されます。

ただし、このページでは、ユーザーがまだサインインしていると信じてホームページに戻ります。したがって、サインイン変数はリセットされていないと思います。

私の問題を解決する方法についての考え?

4

5 に答える 5

1

session_destroy()は、セッション内のグローバル変数の設定を解除しません。単に使用する:

session_unset();

すべてのグローバル変数の設定を解除する、または指定された変数のみの設定を解除するには、次を使用します。

unset($_SESSION['signin']);
于 2012-10-24T23:50:15.060 に答える
0

あなたはこのようなことを試すことができます。

session_unset() 
于 2012-10-24T23:38:57.293 に答える
0

使用する必要はありません

$_SESSION['signin'] = null;

使用session_destroy();するだけで十分です

PHPの詳細については正確にはわかりませんが、$ _ SESSION変数をNULLに設定すると、PHPはNULLに設定されているため、「設定されている」という意味でそれを読み取ることができますか?(確かにわかりませんが)

于 2012-10-24T23:40:52.367 に答える
0

この場合、変数を破棄する場合は、次のようにすることができます。logout.phpという名前のページを作成し、ユーザーがログアウトする必要があるときはいつでも、そのページにリダイレクトします。さて、そのページの中に以下を入れます、そしてここで私はこれが何をするかをあなたに説明します:

<?php
session_start(); //Initializes the session
unset($_SESSION['thenameofyoursession']); //This unsets a specific session, so the user is logged out, in this case it would unset "thenameofyoursession".
$URL="/test/home.php"; //This is the redirect URL
header ("Location: $URL"); //This basically will send the user back to the redirect URL using header.
die(); //terminates the PHP script from running
?>

それであなたは大丈夫なはずです。

于 2012-10-24T23:41:57.200 に答える
0

あなたの手順はかなり明白で、私たちが使用するものと似ていますが、unset()何も有効でない場合は、セッション全体に最適です。--ログインしていない場合、セッション変数は存在しないはずです。

私のlogout.phpスクリプトにはこれが含まれています:

session_start();

session_register("loginMessage");
session_unregister("authenticatedUser");
session_destroy();

// relocate back to login page
header("Location: /");

どちらが機能しますか。session_unset()歴史的に冗長です。

お役に立てれば。

于 2012-10-24T23:57:42.750 に答える