代码之家  ›  专栏  ›  技术社区  ›  Chris Bier

php会话过期重定向[重复]

php
  •  0
  • Chris Bier  · 技术社区  · 17 年前

    可能重复:
    Automatically re-direct a user when session Times out or goes idle…

    我有一个登录系统,会话将过期,但他们需要刷新页面,以便再次显示登录屏幕。相反,我的用户输入数据并点击提交以发现他们已经注销。

    会话过期后,是否有任何方法使该页自动重定向到登录页?

    谢谢!

    编辑::

    从回顾之前发现的问题 Here 我已使用此申请的已接受答案。谢谢大家的建议。

    5 回复  |  直到 17 年前
        1
  •  0
  •   bluebrother    17 年前

    好吧,最理想的情况是,用户使用表单发送的数据被临时保存,用户有机会再次登录,然后被重定向到他所来自的页面,该页面已经填充了旧数据。必须输入两次数据(或者如果你正处于某个过程中,在一段时间后让页面本身重新定向)是相当烦人的。

    如果您希望在不保留页面上输入的数据的情况下重定向,则至少应向用户显示一个指示,说明他在页面过期之前还剩多少时间。使用JavaScript应该是一个很好的选择。

        2
  •  1
  •   Paul Dixon    17 年前

    你可以使用 meta-refresh 标签,例如10分钟后重定向:

    <meta http-equiv="refresh" content="600;url=http://example.com/" />
    

    这不是一种非常用户友好的方式来处理会话到期,特别是对于您突出显示的用例。

    一种更好的技术是使用javascript跟踪用户活动,方法是获取按键和鼠标移动事件。每分钟,如果有一些活动,则触发一个XMLHttpRequest以保持会话活动。

    假设您的会话在10分钟后到期,而这个JS在这段时间内没有发现任何用户活动,它可以在页面的横幅内提醒用户会话已到期,并提供重新建立会话的方法等。

    这样,执行数据输入或(无论表单是为什么)的人不会在他们花时间的时候丢失他们的会话,如果他们离开办公桌去吃午饭,也不会被重定向!

        3
  •  1
  •   Lawrence Barsanti    17 年前

    创建页面时,可以使用php函数ini-get读取会话生存期。
    在会话过期后,可以使用javascript执行重定向。

    // javascript 
    var logout = function () {
       //redirect code
    };
    setTimeout(logout, <%= 1000 * (int)ini_get("session.gc_maxlifetime") %>);
    
        4
  •  0
  •   Alt-Rock Ninja Cowgirl    17 年前

    我也使用了一个javascript解决方案。我们的登录页面会破坏会话,所以我们有一个计时器,在每次页面加载时重置为零。如果计时器过期,它将重定向到登录页,这将破坏会话。

        5
  •  0
  •   Ben Hughes    17 年前

    您可以使用javascript定期检查会话是否已过期,然后重定向会话(如果已过期)。实现取决于身份验证系统的详细信息,但基本上涉及将会话的过期时间传递到页面,然后将过期时间与当前时间进行比较,直到会话过期。

    编辑:实例

    我使用prototype.js,所以如果您使用其他框架(或者只是原始JS),那么您必须对其进行调整。

    <input type="hidden" id="expiration" value="<?php echo(time() + SESSION_TTL) ?>" />

    <script type="text/javascript">
      new PeriodicalExecuter(function(pe) {
        if(getTime() >= parseInt($('expiration'))) {
          window.location = "http://session.expired.com"
        }
      }
    </script>
    

    应该按照你想要的去做。

    推荐文章