PHP:如何在用户仍然登录时防止会话过期

时间:2015-06-28 13:42:54

标签: php session cookies session-cookies session-timeout

我是PHP新手,希望有人可以帮助我。

我目前使用以下内容来创建会话/ cookie ,并在会话过期或未登录时将用户重定向到登录页面。这包含在所有页面上网站。

到目前为止,这似乎按预期工作。但是,当我用短暂的生命周期(例如2分钟)对其进行测试时,它还将我重定向到登录页面,同时我还在网站上并登录。

只要用户在网站上,我就可以将其设置为不过期。只要网站在浏览器中打开?我做了一些研究,但找不到任何适当的教程。

我的PHP:

session_set_cookie_params(86400 * 30, "/");
if(isset($_COOKIE["PHPSESSID"])){
    session_id($_COOKIE["PHPSESSID"]);
}

session_start();

$pageURL = basename($_SERVER["REQUEST_URI"]);
$pageName = pathinfo(parse_url($pageURL, PHP_URL_PATH), PATHINFO_FILENAME); 

if( (!isset($_SESSION["user"]["status"])) && ($pageName != "login") ){
    header("Location: " . $baseURL . "/login.php");
    exit;
}

非常感谢您对此提供的任何帮助, 麦克

1 个答案:

答案 0 :(得分:2)

用户必须浏览网站上的页面才能保留会话。

一种可能的解决方案是使用定时ajax调用来保持会话活跃。

每次用户向您的站点发送http请求时,包含会话数据的cookie都会一起发送,服务器会扩展会话。

向刷新会话添加ajax调用的示例。加载jquery后添加脚本。将每隔60秒向您的域根发送一次ajax调用。

setTimeout(function(){
     $.get({url:'/'})
 }, 60 * 1000);

使用ajax来保存会话是一种hackish,可能会在以后导致很多问题。 请谨慎使用!