PHP Session超时,但AJAX调用仍然有效

时间:2014-01-29 18:40:02

标签: php ajax session-variables

我使用Apache,PHP,MySQL在localhost框上创建了一个内部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

1 个答案:

答案 0 :(得分:0)

在没有检查旧会话是否已过期的情况下,您需要先检查,然后才能发出start_session()

通过检查客户端是否仍有会话cookie(通常PHPSESSION,只要您没有更改名称),您可以非常轻松地完成此操作。一旦此过期,当前(最后)会话消失,用户需要再次登录。

为了妥善处理这一问题并总结上述评论,您首先需要:

  1. 检查是否有会话正在运行
  2. 检查,如果在正在运行的会话中,用户已经过身份验证
  3. 检查是否授予此用户提交当前操作
  4. 如果其中一项检查失败,请将其重定向到登录屏幕。然后,您可以终止任何正在运行的会话,并使用新的会话ID启动新会话,以便删除旧数据。

    到目前为止,您在php.ini中所做的只不过是为旧会话数据设置垃圾收集。这是最后一次做。 “使用cookie”不会处理登录e.a.对于你的应用程序,当前打开就像任何一个进入的谷仓门(“攻击”是错误的单词)。