我正在编写一个脚本,该脚本应该结束用户的会话,并将它们从系统中注销,从而将它们返回到登录页面。
我的注销脚本如下所示:
<?php
$_SESSION['signin'] = null;
session_destroy();
header("Location: /test/index.php");
?>
最初我以这种方式重置signin
变量,即使会话未被破坏,变量至少应该更改,以便系统认为用户已注销。
在登录页面的顶部我有条件将它们转发到主页,如果它们已经登录,那么一旦登录就无法访问登录页面。这部分看起来像这样:
<?php
session_start();
if($_SESSION['signin'] == 5)
{
header("Location: /test/home.php");
}
?>
简而言之,当有人登录并点击链接注销时,它会利用第一个代码块注销,然后转发到包含第二代代码的页面。
然而,这个页面仍然转发回主页,认为用户仍然登录,因此我猜测登录变量没有重置。
关于如何解决我的问题的想法?
答案 0 :(得分:1)
session_destroy()不会取消设置会话中的任何全局变量。只需使用:
session_unset();
要取消设置所有全局变量,或者只取消设置指定变量,请使用:
unset($_SESSION['signin']);
答案 1 :(得分:0)
你可以尝试这样的事情。
session_unset()
答案 2 :(得分:0)
你不必使用
$_SESSION['signin'] = null;
使用session_destroy();
应该足够了
我并不完全了解PHP的深层内容,但是如果你将$ _SESSION变量设置为NULL,那么PHP可以读取它,因为它被设置为NULL,这意味着它被设置为#39 ;? (虽然不确定)
答案 3 :(得分: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
?>
你应该没事。
答案 4 :(得分:0)
您的程序非常明显且类似于我们使用的程序,但是,如果整个会话中的任何内容都无效,则最好unset()
。 - 如果他们没有登录,则不应存在会话变量。
我的logout.php
脚本包含以下内容:
session_start();
session_register("loginMessage");
session_unregister("authenticatedUser");
session_destroy();
// relocate back to login page
header("Location: /");
哪个有效。 session_unset()
在历史上是多余的。
希望这有帮助。