【问题标题】:How do I keep a session alive in new tab PHP如何在新标签 PHP 中保持会话活动
【发布时间】:2016-04-17 07:05:09
【问题描述】:

我正在为 php 中的会话而苦苦挣扎。通常,一切都很好,但有时,如果我在新选项卡中打开网页(通过链接或直接通过键入),即使会话在第一个选项卡中仍然存在,会话也会终止。 这很烦人,我将不胜感激。

这是我的简单登录代码

<?php
session_set_cookie_params(1800,"/");
session_start();

if(isset($_POST['go']))
{
// do the checking
if login and password is correct
{
// do some stuff

//ini_set('session.cookie_lifetime', 1800);
//ini_set('session.gc_maxlifetime', 1800);
// I've tried both but there is no difference so I don't use it
}
}

?>

在每一页的开头

<?php
session_set_cookie_params(1800,"/");
session_start();

我已经寻求帮助并尝试在 session_start 之前使用 session_set_cookie_params(1800,"/") 但我没有发现任何区别。

编辑: 对不起,我没有具体说。成功检查后,我将数据库中的用户 ID 和上次活动的时间戳放入变量中:

$_SESSION['id'] = $result['id'];
$_SESSION["LAST_ACTIVITY"] = time();

然后,一开始我检查 id 变量是否不为空,如果不为空,则更新最后一个活动时间戳:

if(isset($_SESSION['id']))
{

if ((time() - $_SESSION["LAST_ACTIVITY"] > 1800)) 
{
    session_unset();     // unset $_SESSION variable for the run-time 
    session_destroy();   // destroy session data in storage
}
else 
{   
$time = time();
$_SESSION["LAST_ACTIVITY"] = $time; // update last activity time stamp
} 

}

【问题讨论】:

  • 您在会话中在哪里写任何东西?以及您尝试从哪里读取?
  • 您应该在登录后将一些内容,例如 UserID 放入 $_SESSION 变量 ($_SESSION['userID'] = $userID) 中。然后像这样在每个页面的开头进行检查 -> if (!isset($_SESSION['userID'])) { //code to redirect to login page } 。如果有帮助,我会重写我的评论作为答案。
  • 有时是我正在看的位。我在猜测,但是使用 session_set_cookie_params(1800,"/") 查看与您存储会话的文件夹,斜杠与该目录相关吗? - 可能是许可的事情,或者可能是另一个删除文件的服务。至少值得一看
  • 如果您关闭浏览器,会话 ID 仍将保留。在您删除 cookie 和缓存之前,您将保持登录状态。所以@SamyQc 所说的基本上是正确的。在继续执行代码之前,您先检查用户是否已登录。
  • 请检查我更新的问题。

标签: php session hyperlink tabs


【解决方案1】:

您应该在用户登录后立即将 UserID 之类的内容放入 $_SESSION 变量中。

$_SESSION['userID'] = $_POST['userID'];

正如 RepeaterCreeper 所说,会话将保持活动状态,直到您的 cookie / 缓存被清除(或直到它们过期)

剩下要做的就是在每个页面的开头添加一个检查以查看用户是否已登录。您可以使用包含 userID 的 $_SESSION 变量来验证用户是否已登录。如果他不是,只需将他重定向到您的登录页面。 :

if (!isset($_SESSION['userID'])) { 
    header ('location: loginpage.php'); 
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多