【问题标题】:Keeping session alive with ajax in php在php中使用ajax保持会话活跃
【发布时间】:2019-03-03 17:29:03
【问题描述】:

我有一个 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 分钟后刷新,页面仍然会被注销...有人可以告诉我为什么在这种情况下会话没有激活,即使我在几分钟内调用了服务器?

【问题讨论】:

  • 您在远程页面中设置会话而不刷新当前页面。设置会话后不刷新当前页面,当前页面中不存在会话。如果现有页面中有session_start(),请在设置会话后刷新它。
  • @JayBlanchard 感谢您的帮助。但是如果我可以在时间间隔内刷新当前页面,则无需将 ajax 调用单独页面本身。目的是即使用户处于非活动状态超过 30 分钟也能保持会话处于活动状态。我无法刷新页面,因为应用程序的某些部分无法刷新,除非用户取消操作...我也尝试过像这样的 ini 设置... ini_set('session.gc_maxlifetime', 180000); ...它也没有帮助...
  • 除非刷新页面,否则会话将永远不会存在于当前页面中。

标签: php session


【解决方案1】:

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

将此变量更新为 179000

var refresh_interval = 179000;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多