由于$_cookie数组中的cookie名称错误,关闭浏览器后“记住我”功能无法工作


Remember me feature not working after closing the browser due to wrong cookie name in $_COOKIE array

我是PHP新手。我已经尝试实现记住我的功能,如下所述。

MysqlSessionHanlder.php->这实现了接口所需的6个会话相关功能+"常规登录"和使用记住我功能登录的所有功能。

login.php->自我解释。

restricted1.php->如果登录成功,login.php将重定向到此页面。

authenticate.php->访问前需要进行身份验证的每个页面都应该包含此页面。

db_connect.php->自我解释。

定期登录效果良好。我也可以在选中记住我复选框的情况下登录,即在这两种情况下,我都会被重定向到restricted1.php。但是,一旦我使用记住我功能登录->关闭浏览器->尝试直接转到restricted1.php,我就会再次被重定向到登录页面。

这是因为restricted1.php调用firstauthenticate.php,并且该文件检查用户是通过常规身份验证还是通过自动登录现有cookie进行身份验证。

如果不是,则意味着用户尝试在没有调用checkCredentials()函数的第一次登录的情况下访问受限页面。

authenticate.php代码

require_once __DIR__ . '/db_connect.php';
require_once __DIR__ . '/../../classes/MysqlSessionHandler.php';
$handler = new MysqlSessionHandler($db);
session_set_save_handler($handler);
session_start();
$_SESSION['active'] = time();
if (isset($_SESSION['authenticated']) || isset($_SESSION['auto_login'])) {
   // we're OK
} else {
    $autologin = new MysqlSessionHandler($db);
    $autologin->checkCredentials();
    if (!isset($_SESSION['auto_login'])) {
        header('Location: login.php');
        exit;
    }
}

然而,当我关闭Chrome,重新打开它,然后尝试直接访问restricted1.php时,我会被重定向到login.php。

在调试过程中,我发现了以下内容:

  1. 每次用户使用记住我功能登录时,我编写的一个名为persistentlogin()的函数都会在DB+中存储一个新的令牌,并使用setCookie()函数设置一个名"auto_login"的cookie,其中包括该令牌。

  2. 我注意到$_cookie超级全局数组中显示的cookie名称是PHPSSID(默认名称),尽管我在代码中设置了不同的cookie名称("auto_login")。我可以在chrome浏览器设置中看到两个cookie:PHPSSID和"auto_login"cookie,但$_cookie超级全局数组中没有显示"auto_logon"cookie名称。我认为这是我的问题,因为checkCredentials()试图访问"auto_login_cookie",如下所示:

    if(isset($_COOKIE[$this->COOKIE]){

    $cookie是设置为"auto_login"的属性。

为什么我看不到由$_cookie数组中的setCookie()命令设置的"auto_login"cookie

谢谢,

Qwerty

经过几天的调试(!),我发现了问题:

为什么我的cookie没有设置?

事实证明,我将cookie路径设置为"/"以外的其他路径,这导致了此问题。

无论如何都要感谢:-)

+1献给所有付出辛勤工作,永不放弃,直到达到目的的人!