我四处寻找这个问题的答案。我有一个播放长视频文件的网站。我不希望用户在观看视频时超时,因此我想对刷新 session 的计时器进行 AJAX 调用。许多人告诉我,在刷新页面上对 session 进行任何操作就足够了,但没有任何效果。我将 php session 过期时间设置为 30 分钟。我宁愿不再增加这个。
这是我的 jquery/AJAX 调用
//var time = 20000; // for live
var time = 10000; // for testing
// loop to handle refresh session
setInterval(function() {
// ajax call to get image
$.ajax({
url: 'refreshSession.php',
cache: false,
async: false,
type: "POST",
data: {},
success: function(){},
error: function(request, status, error){
alert('Login Session Error: ' + request.responseText + ' STATUS: ' + status + ' ERROR: '+error);
}
});
}, time);
AJAX 调用运行良好并且循环正确。这是我需要保持 session 事件的refreshSession.php 文件。
<?php
include_once("configure.php");
// store session data
if (isset($_SESSION['userData']['userID']))
$_SESSION['userData']['userID'] = $_SESSION['userData']['userID']; // or if you have any algo.
?>
请注意,configure.php 文件确实调用了 session_start();我正在将 session ID 和其他信息写入文件,并且正在写入正确的信息。所以我知道这个 php 文件正在读取 session 变量。
但是,30 分钟后,我退出并重置 session 。我有什么遗漏的吗?
最佳答案
不知道您是否找到了这个问题的解决方案,但是我也遇到了这个问题,并且能够通过更新 session cookie 到期时间来解决它。
您需要了解 session 是根据服务器设置的 cookie 来维护的。当您的主页加载时,响应 header 会设置带有到期日期的 cookie。为了增加您的 session 到期时间,需要增加此 cookie 到期时间。
Set-Cookie:PHPSESSID=xxxxxxxxxxxxxxx; expires=Thu, 04-Aug-2016 10:22:20 GMT; Max-Age=900;
因此您需要更新 session cookie 并延长过期时间。使用 setcookie() 来完成此操作。
<?php session_start();
setcookie("PHPSESSID", session_id(), time() + ini_get("session.cookie_lifetime"));
include_once("configure.php");
您还可以使用session_regenerate_id()。这将完成更新 session ID 和过期时间的任务。这也将防止 session 劫持和 session 固定。
关于PhP session 不使用 AJAX 刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24003167/