如何在新选项卡PHP中保持会话处于活动状态

时间:2016-01-12 15:26:09

标签: php session hyperlink tabs

我在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,&#34; /&#34;),但我认为没有区别。

编辑: 对不起,我并不具体。在成功检查之后,我将db中的用户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
} 

}

1 个答案:

答案 0 :(得分:0)

在用户登录后,您应该在$ _SESSION变量中添加类似UserID的内容。

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

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

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

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