我已经搜索了高低,以获得答案。我有一个播放长视频文件的网站。我不希望用户在观看视频时超时,所以我想在一个刷新会话的计时器上放置一个AJAX调用。许多人告诉我,在刷新页面上做会话就足够了,但没有任何工作。我将php会话过期设置为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调用工作正常并且正确循环。这是我需要保持会话活动的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();我正在向文件写入会话ID和其他信息,并且正在编写正确的信息。所以我知道这个php文件正在读取会话变量。
但是,30分钟后,我退出并重置了会话。我有什么遗失的吗?
答案 0 :(得分:0)
不知道你是否得到了这个问题的解决方案,但是我也遇到了这个问题,并且能够通过更新会话cookie到期时间来解决它。
您需要了解会话是根据服务器设置的cookie进行维护的。当您的主页面加载时,响应标头设置带有效期限的cookie。为了增加会话到期时间,需要增加此cookie到期时间。
设置Cookie:PHPSESSID = XXXXXXXXXXXXXXX;到期= 2016年8月4日星期四 格林尼治标准时间10:22:20;最大年龄= 900;
因此您需要使用延长的到期时间更新会话cookie。使用setcookie()来实现这一目标。
<?php session_start();
setcookie("PHPSESSID", session_id(), time() + ini_get("session.cookie_lifetime"));
include_once("configure.php");
您还可以使用session_regenerate_id()。这将执行更新会话ID和到期时间的任务。这也可以防止会话劫持和会话固定。
答案 1 :(得分:-1)
此:
<?php
include_once("configure.php");
应该是:
<?php
session_start(); //This line is missing
include_once("configure.php");