当用户点击退出按钮时,我会连接到一个只执行此操作的脚本
session_destroy();
session_start();
我认为这足以重置所有$_SESSION
变量,例如$_SESSION['logged']
和$_SESSION['username']
,但当我再次加载页面时,它会自动登录,就像会话仍然是活性
答案 0 :(得分: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']
将不存在
答案 1 :(得分:1)
肯定你会有$ SESSION_DESTROY();独立,没有$ SESSION_START();在退出页面内?
答案 2 :(得分:0)
您必须使用Page_init()事件来检查用户会话变量。如果在页面加载时检查用户会话变量,则它会将您显示为活动会话。您可以通过以下方式在Page_init()事件中检查用户会话,如下所示。
protected void Page_init(object sender, EventArgs e)
{
if (Session["User"] == null)
{
Response.Redirect("home.aspx");
}
}
您可以在所有页面上使用此事件,因此如果使用session_destroy()销毁会话;方法然后您被重定向到登录页面。
谢谢