【问题标题】:Extend PHP Session timeout using Ajax使用 Ajax 延长 PHP 会话超时
【发布时间】:2015-09-08 20:03:56
【问题描述】:

我有一个网页要填写一个巨大的表格。在大多数情况下,会话超时并且用户丢失了大量数据。我搜索了这个问题,发现了这个Prevent session expired in PHP Session for inactive user

我实现了 ajax 调用

function heartbeat() {
    clearTimeout(window.intervalID);
    $.ajax({
        url:    "trash.png",
        type:   "post",
        cache:  false,            
        dataType: 'json',
        success: function(data) {
        },
        complete: function() {
            window.intervalID = setTimeout(function() {
                heartbeat();    
            }, 300000); 
        }
    });
}

并在$(document).ready 中调用heartbeat();trash.png 与我使用 Ajax 的 jQuery 代码所在的文件位于同一目录中。

我检查了提琴手,jQuery 每 5 分钟向trash.png 发送请求。但 30 分钟后,我的会话仍然过期。

session_start();在用户登录网页时调用。

我做错了什么?

【问题讨论】:

    标签: javascript php jquery ajax session


    【解决方案1】:

    如果不调用启动会话的 php 脚本,您将无法保持会话处于活动状态,仅下载 png 文件不会阻止会话死亡。像这样创建一个 PHP 脚本:

    <?php session_start(); ?>
    

    将它放入目录并调用它而不是那个垃圾.png 资产。

    您可能需要在调用 session_start() 之前调用其他东西,具体取决于您在其他脚本中的启动方式。

    【讨论】:

    • 我更新了我的问题。用户登录时我已经开始会话。
    • 这无济于事,如果您在超时发生之前不调用(重新)启动会话的 php 脚本,会话将超时。
    • 我应该如何重新启动会话?由于这篇文章,我尝试将 ajax 请求发送到图像并接受了答案stackoverflow.com/questions/5962671/…
    • 正如我在回答中已经说过的,创建一个名为hearbeat.php 的php 脚本,将上面显示的代码放入其中,将其上传到脚本所在的目录并调用hearbeat.php 而不是垃圾.png
    • 好的,我试试这个。但我仍然有点担心,因为来自 PHP 文档:4.3.3 As of PHP 4.3.3, calling session_start() after the session was previously started will result in an error of level E_NOTICE. Also, the second session start will simply be ignored.
    【解决方案2】:

    在 ajax 中,您可以将超时发布为

    jQuery.ajax({
           url: 'ajaxhandler.php',
           success: function (result) {                               
                returned_value=result;
           },
           timeout: 10000,
           async: false
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 2014-07-16
      • 2016-04-02
      • 2010-10-05
      • 1970-01-01
      • 2015-11-24
      相关资源
      最近更新 更多