PhP Session不使用AJAX刷新


PhP Session does not refresh using AJAX

我到处寻找这个问题的答案。我有一个播放长视频文件的网站。我不希望用户在观看视频时超时,所以我想在刷新会话的计时器上放置一个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分钟后,我被注销,会话被重置。我是不是漏掉了什么?

不知道你是否得到了这个问题的解决方案,但是我也面临这个问题,并且能够通过更新会话cookie过期时间来解决这个问题。

您需要了解会话是基于服务器设置的cookie来维护的。当你的主页加载响应头设置cookie与到期日期。为了增加会话过期时间,需要增加此cookie过期时间。

set - cookie: PHPSESSID = xxxxxxxxxxxxxxx;到期=星期四,04 - 8月- 201610: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和到期时间的任务。这还可以防止会话劫持和会话固定。

This:

<?php
 include_once("configure.php");
应:

<?php
session_start(); //This line is missing
include_once("configure.php");
相关文章: