【问题标题】:Check if session has expired yet with ajax request使用ajax请求检查会话是否已过期
【发布时间】:2011-08-22 10:20:05
【问题描述】:

在stackoverflow上有几个这样的问题,但没有一个回答得非常有说服力:)

我希望能够在用户离开计算机 20 分钟并允许会话超时时显示登录提示。

  1. 简单的“等待 20 分钟,然后显示提示”是行不通的,因为用户可能在网站的另一个选项卡中处于活动状态。
  2. 向服务器发出标准 ajax 请求以检查会话是否仍处于活动状态,这实际上会使用户保持登录状态,因此也不会这样做。

有没有办法向不继承当前会话标识的服务器发出 ajax 请求? (避免第 2 点发生)

谢谢

【问题讨论】:

    标签: jquery ajax session


    【解决方案1】:

    为什么不只在用户在网站上发起一项他们没有权限的操作时才运行 ajax 调用?这样,当用户第一次访问网页时,您可以使用 php 设置会话变量,例如:

    $_SESSION['active'] = true;

    当原始会话到期时,该变量将不再可用。然后,当您需要根据用户的操作检查会话是否过期时,您可以向服务器发送请求并根据会话变量是否设置来验证会话的当前状态。

    【讨论】:

      【解决方案2】:

      向服务器发送标准 ajax 请求以检查会话是否仍处于活动状态,这实际上会使用户保持登录状态,因此也不会这样做。

      如果会话在 20 分钟后过期,请在 21 分钟后进行检查:)

      有没有办法向不继承当前会话标识的服务器发出 ajax 请求? (避免第 2 点发生)

      假设您使用 cookie,没有 cookie 就无法向服务器发送请求。但是,您可以将您的网络服务器或框架配置为不考虑特定请求/路径的 cookie 会话,然后检查会话有效性而不刷新它。

      【讨论】:

      • You can however configure your webserver or framework to not take the cookie session into account - 看到 IIS 管理会话,如何做到这一点?
      【解决方案3】:

      有趣的问题。我相信解决方案在于服务器端处理会话活动的方式。

      如果您为会话提供活动监控机制,请说一个“$last_active”变量来监控上次请求的时间,并在向服务器发出请求时更新它,然后反过来,如果某个时间已经过去了,这将有助于保持活动的内容,无论 PHP/APACHE 提供的自动功能如何。

      然后您可以使用条件,例如,如果您的 url 中包含“?querylogin=1”。您可以让服务器端脚本检查该 GET 变量是否存在,然后对 AJAX 做出响应请求,而不更新“$last_active”变量。我想应该这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-20
        • 2018-02-22
        • 2011-08-01
        • 1970-01-01
        • 2015-02-17
        • 1970-01-01
        • 2013-10-07
        • 1970-01-01
        相关资源
        最近更新 更多