0

我有一个 PHP 应用程序,无论服务器设置如何,我都想让会话保持活动状态。我按如下方式进行了 ajax 调用,以便在间隔内通过 ajax 调用服务器...

 <script type="text/javascript">
            jQuery(document).ready(function(){
                var refresh_session = function(){
                    var refresh_interval = 180000;
                    setTimeout(function(){
                        jQuery.ajax({
                            url: 'refresh-session.php',
                            cache: false,
                            success: function(){
                                refresh_session();
                            }
                        });
                    }, refresh_interval);
                }
                refresh_session();
            });
        </script>

在服务器中我有这个代码......

 <?php
  @session_start();
  $_SESSION['last_refreshed_time'] = time();
  echo date('Y-m-d H:i a', $_SESSION['last_refreshed_time']).' - '.session_id();
 ?>

我看到 ajax 调用是在指定的时间间隔内进行的,并且我可以在每个 ajax 输出上看到相同的会话 ID。但是,如果我在 30 分钟后刷新,页面仍然会被注销......有人可以告诉我为什么在这种情况下会话没有激活,即使我在几分钟内调用了服务器?

4

1 回答 1

0

如果您的服务器会话超时为 30 分钟,这意味着 1800 段,这意味着 180000 微秒,就像您在脚本中一样,但是当它执行时,会话已经过期。您必须在会话结束之前刷新会话。尝试将值更改为 1790 segs 或 179000 微秒,以便您有 10 秒的时间来执行 ajax 并刷新会话。

将此变量更新为 179000

var refresh_interval = 179000;
于 2019-03-11T13:40:56.697 回答