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");
}
?>

所以简而言之,当有人登录并单击链接注销时,它会利用第一个代码块注销,然后转发到包含第二个代码块的页面。

然而,这个页面仍然让我回到主页,相信用户仍然登录,因此我猜测登录变量没有重置。

关于如何解决我的问题的想法?

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 回答