当用户单击注销按钮时,我会连接到一个只执行此操作的脚本

session_destroy();
session_start();

我认为这足以重置所有$_SESSION变量,例如$_SESSION['logged']$_SESSION['username']但是当我再次加载页面时,它会自动登录,就像会话仍处于活动状态一样。

#1楼 票数: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']将不存在

#2楼 票数:1

当然你只需要$ SESSION_DESTROY(); 独立,没有$ SESSION_START(); 在退出页面内?

#3楼 票数:0

您必须使用Page_init()事件来检查用户会话变量。 如果在页面加载时检查用户会话变量,则它会将您显示为活动会话。 您可以通过以下方式在Page_init()事件中检查用户会话。

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

你可以在所有页面上使用这个事件,所以如果你使用session_destroy()销毁会话; 方法然后您被重定向到登录页面。

谢谢

  ask by Kamo translate from so

未解决问题?本站智能推荐:

4回复

PHP-管理会话-不注销

我创建了具有必要数据库表和php的用户身份验证系统。 在我登录之前的第一次(在创建任何会话之前),每个页面上的重定向都可以正常工作(即,如果未登录,则重定向到登录页面)。 但是,一旦我用用户登录然后注销,就不会起作用。 我认为未结束会议可能是一个问题(对不起,如果错了) 这是每个页
3回复

PHP会话未设置或PHP会话破坏

当我尝试注销时: session_destroy(); 然后它起作用了。 但是问题是,我还有一个带有会话的购物车。 所以session_destroy(); 对我来说不是一个选择。 当我使用unset($_SESSION['username']); 功能似乎正常。 但是,当我返回到
1回复

会话未正确结束

我已经为我的网站创建了一个简单的登录系统,因为我想限制对某些页面的访问。 用户可以正常登录,但是注销用户时遇到问题。 我正在使用$_SESSION['username']存储用户名。 当我注销用户时,它似乎注销了用户并显示了登录屏幕,但是当我进入受限页面之一时,该会话仍处于活动状态。
3回复

销毁php中的会话[重复]

这个问题已经在这里有了答案: 为什么会话对象销毁失败 3个答案 我已经看到了很多关于此的问题,但我仍然对此有疑问...有人可以帮我吗? 登录页面: 注销页面: 即时通讯收到此错误:
1回复

会话销毁/注销奇怪的问题

我的网站使用一个简单的登录系统,该系统为用户名和登录会话创建一个cookie。 如果有人访问home.php并将登录会话设置为已登录,则将他们推送到已登录区域。 否则,他们将使用简单的表单和处理程序页面登录。 要注销用户,请单击一个链接,该链接将带他们到logout.php,其中包含以下代
2回复

正确使用PHP会话

我正在使用PHP和MySQL创建一个Web门户,供用户使用单一登录方法登录和访问各种工具。 其中一些工具包括phpMyAdmin和Piwik。 登陆页面将显示无需单独登录即可使用的所有工具。 该会话称为“门户”。 我有以下文件:index.php-检查是否已登录。 如果登录,则显示
1回复

会话中的PHP登录系统问题!

我对会话和登录/注销系统有一些疑问。 在我的系统中,首先要检查用户数据(用户名和密码)是否正确。 如果是这样,我正在注册一个会话: $_SESSION['loggedin'] = 1那么我假设已登录,并且我始终检查$_SESSION['loggedin'] 1是否。 但是,我最近观察到
1回复

Laravel-忘记会话中的先前网址

情况: 在我们的系统中,从Admin中注销用户仅将他们从admin部分注销,而我们希望他们从应用程序中注销(我们使用laravel的encore admin软件包)。 我创建了一个新的注销类,该类将覆盖默认的管理员注销,并同时运行标准的laravel注销。 这样就成功地将用户从系统中注销