PhP会话不使用AJAX刷新

时间:2014-06-02 20:57:12

标签: php jquery ajax session

我已经搜索了高低,以获得答案。我有一个播放长视频文件的网站。我不希望用户在观看视频时超时,所以我想在一个刷新会话的计时器上放置一个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分钟后,我退出并重置了会话。我有什么遗失的吗?

2 个答案:

答案 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");