首页 > 解决方案 > 如何在 PHP 中保持用户登录一个月?

问题描述

我已经通过 StackOverflow 和其他论坛进行了搜索,但没有找到让我的代码工作的方法。我为我的用户设置了一个基本的登录机制,它工作得很好。但是,当浏览器关闭时,用户必须访问该站点并重新登录。我需要找到一种方法让用户在一个月内保持登录状态。

我研究了 cookie 并进行了两天的实验,但当我退出浏览器并重新加载网站时,用户始终处于注销状态。唯一有效的方法是使用 ini_set 更改 session.gc_maxlifetime 和 session.lifetime 变量,但出于某种奇怪的原因,无论我为这两个变量分配什么值,用户只会保持登录状态大约 4 小时。那么,有谁知道我在设置下面的 cookie 时是否做错了什么,或者我该如何解决我的问题?提前感谢您的回答,我对这个问题束手无策。

        //create cookie, set expiration to one month (in seconds)

        setcookie("user",$username,time()+2592000);
        echo $_COOKIE["user"];

        session_start();

        //Login Successful, begin session

        $member = mysqli_fetch_assoc($result);
        $_SESSION['SESS_MEMBER_ID'] = $member['id'];
        $_SESSION['SESS_FIRST_NAME'] = $member['username'];
        $_SESSION['SESS_LAST_NAME'] = $member['password'];
        $_SESSION['table'] = $table;

        session_write_close();

        //header("location: search.php");
        exit();

标签: phpmysqlsessioncookies

解决方案


在登录页面添加(会话):

$_SESSION['timeout'] = time();

和索引检查:

session_start();

$timeout = 7200; //time in seconds

if(isset($_SESSION['timeout'])) {
    $duracao = time() - (int) $_SESSION['timeout'];
    if($duracao > $timeout) {
      session_start();
      session_destroy();
      session_unset();
      echo "<script type='text/javascript'>location.href='index.php'</script>";
    }
}

推荐阅读