【发布时间】: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); ...它也没有帮助...
-
除非刷新页面,否则会话将永远不会存在于当前页面中。