【发布时间】:2014-02-21 18:25:58
【问题描述】:
我使用 Apache、PHP、MySQL 在本地主机上创建了一个内部 Web 应用程序。
一个用户在使用它并在他的浏览器窗口中打开了一夜。当他回到应用程序并再次开始使用它时,直到他尝试离开该页面时才收到超时消息,这很好(并且是理想的)但是他所在的页面有很多 AJAX 片段,他能够使用(调用)ajax 页面并让它们毫无问题地出现!他以为他在工作,但当他最终导航到应用程序中的另一个页面时,它启动到登录屏幕并且他没有保存任何内容。
一旦他调用了 AJAX 页面,我希望应用程序检查是否有会话 id,如果没有找到,则启动回到登录页面。我怎样才能做到这一点?
每个 AJAX 页面都是它自己的 PHP 页面,并且在页面的最顶部有对 session_start(); 的调用,它们会在调用自定义函数后立即检查是否通过查找某个会话变量的存在来记录用户。那不应该没有找到会话变量,然后根据需要重定向,或者如果找不到,它是否会尝试创建一个全新的会话?
我需要类似 session_continue 而不是 session_start 的东西。
这是 php.ini 文件的摘录,其中包含相关的会话信息。
; Whether to use cookies.
session.use_cookies = 1
; Define the probability that the 'garbage collection' process is started
; on every session initialization.
; The probability is calculated by using gc_probability/gc_divisor,
; e.g. 1/100 means there is a 1% chance that the GC process starts
; on each request.
session.gc_probability = 1
session.gc_divisor = 1000
; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 28888
【问题讨论】:
-
如果页面上有 ajax,每个 ajax 请求都应该重置会话超时。如果碰巧会话超时并且发生了 ajax 事件,则它们可能被重定向到 ajax 请求的另一个页面(最有可能是登录页面),并且 ajax 响应不是预期的,导致 javascript 停止任何 ajax 时出错你有计时器。
-
对不起,我稍微更新了问题,只要 session_start 被调用,在另一个名为 check_logged_in 的函数被调用并寻找 $_SESSION['logged_in'] = true 的存在之后立即.如果没有发现它会重定向到登录页面。应用程序中的每个页面都包含该功能以检查他们是否已登录。
标签: php ajax session-variables