首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不重载页面的情况下保持会话活动?

如何在不重载页面的情况下保持会话活动?
EN

Stack Overflow用户
提问于 2012-09-26 16:02:20
回答 2查看 49.7K关注 0票数 27

我的在线考试管理系统出现了一个奇怪的问题。

测试表单(test.php)中的一些用户需要很长时间来回答问题并提交表单。

提交表单后,会话已过期,用户必须重新登录

这不是代码问题

我将此值设置在所有页面的顶部

代码语言:javascript
复制
ini_set('session.gc_maxlifetime', 18000);

有没有办法每隔10分钟刷新一次会话,而不重新加载测试表单中的页面,以防止会话过期?

请帮帮我

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-26 16:12:36

您可以使用javascript XHR,或者其他人称之为AJAX。

使用ajax,你可以调用一个php脚本,每10分钟刷新一次你的会话。:)

这就是我所能说的“精确”。

javascript

代码语言:javascript
复制
var refreshSn = function ()
{
    var time = 600000; // 10 mins
    setTimeout(
        function ()
        {
        $.ajax({
           url: 'refresh_session.php',
           cache: false,
           complete: function () {refreshSn();}
        });
    },
    time
);
};

// Call in page
refreshSn()

refresh_session.php

代码语言:javascript
复制
<?php
session_start();

// store session data
if (isset($_SESSION['id']))
$_SESSION['id'] = $_SESSION['id']; // or if you have any algo.
?>

无论如何,另一种解决方案是只使用这里提供的解决方案来延长测试页面的会话时间

How do I expire a PHP session after 30 minutes?

票数 39
EN

Stack Overflow用户

发布于 2014-05-16 05:58:32

您所需要的就是(在$.post中使用jQuery ):

JavaScript函数(将其放入您的onload-或其他函数中)

代码语言:javascript
复制
setInterval(function(){$.post('path/to/refresh_session.php');},600000); //refreshes the session every 10 minutes

refresh_session.php

代码语言:javascript
复制
<?php
  session_start();

  if (isset($_SESSION['token'])) { //if you have more session-vars that are needed for login, also check if they are set and refresh them as well
    $_SESSION['token'] = $_SESSION['token'];
  }
?>

(我知道这与公认的答案几乎相同,我真的很想对这个问题发表评论,但我还没有足够的声誉。

最大的变化是在JavaScript中,你不需要整个函数,只需要一行。)

额外信息:

尽管我认为只要在php中调用session_start()就足够了,如果我没看错的话(http://nl3.php.net/function.session-start):

PHP回调将检索任何现有的会话数据(以特殊的序列化格式存储),并且将被反序列化,并在read回调将保存的会话数据返回到

会话处理时用于自动填充$_SESSION超级全局。

在测试期间,我只把上面的代码放在我的访问者页面上,而不是放在管理页面上。但我在同一个浏览器(Chrome)中打开了这两个页面,管理页面也保持登录状态,至少登录了一个多小时(不再检查)。但是,如果您只使用session_start()**而不手动刷新任何-var,我不知道它是否仍然有效。**

无论哪种方式,我都希望确保我需要的session-var确实仍然存在:)

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12597176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档