【问题标题】:PHP Session Expire Redirect [duplicate]PHP会话过期重定向[重复]
【发布时间】:2009-06-17 17:42:01
【问题描述】:

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

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

有什么方法可以让页面在会话过期后自动跳转到登录页面?

谢谢!

编辑:::

通过查看Here 之前提出的问题,我已为此应用程序使用了已接受的答案。谢谢大家的建议。

【问题讨论】:

  • 你是对的,它是重复的,谢谢。
  • 我可以帮助你解决问题,但首先我需要知道会话是否必须在一段时间后过期,或者只要用户在页面上就可以保持活动状态,或者至少是活跃的。
  • 我目前正在使用 php.ini 让会话在一段时间后过期

标签: php


【解决方案1】:

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

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

这不是处理会话到期的非常用户友好的方式,尤其是对于您强调的​​用例。

更好的技术是使用 Javascript 通过拾取 keypress 和 mousemove 事件来跟踪用户活动。每分钟,如果有一些活动,就触发一个 XMLHttpRequest 以保持会话处于活动状态。

假设您的会话在 10 分钟后过期,并且此 JS 注意到在那段时间没有用户活动,它可以在您的页面中的横幅内提醒用户他们的会话已过期并提供重新建立会话的方法等。

这样,执行数据输入或(无论表格用于什么)的人在花时间时不会丢失会话,并且在离开办公桌吃午饭时不会被重定向!

【讨论】:

  • 这对于我正在寻找的东西来说有点过于复杂了。
  • 我已经对其进行了编辑,以包含对您有用的最简单的东西:)
  • 我愿意接受挑战,但您认为您可以多解释一下您的基于 javascript 的示例吗?谢谢保罗!
【解决方案2】:

PHP 函数 ini_get 可用于在页面创建时读取会话生命周期。
会话过期后,可以使用 JavaScript 执行重定向。

// javascript 
var logout = function () {
   //redirect code
};
setTimeout(logout, <%= 1000 * (int)ini_get("session.gc_maxlifetime") %>);

【讨论】:

    【解决方案3】:

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

    如果您想重定向而不保留页面上输入的数据,您至少应该向用户显示他在页面过期之前还剩下多少时间。使用 JavaScript 应该是一个不错的选择。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        编辑:示例

        我使用prototype.js,所以如果你使用其他框架(或者只是原始JS),你将不得不适应它。

        &lt;input type="hidden" id="expiration" value="&lt;?php echo(time() + SESSION_TTL) ?&gt;" /&gt;

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

        应该按照自己的意愿去做。

        【讨论】:

        • 我对javascript很陌生,你能提供一个例子吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-09
        • 1970-01-01
        相关资源
        最近更新 更多