我有一个使用会话的网站,允许用户安全地访问我的网站。我也有一个空闲的超时会话(如果使用空闲20分钟,他们会收到弹出消息,看看他们是否仍然在网站上,如果不是它会破坏他们的会话并将他们引导到登录页面。我是什么想要把它们带回到他们退出之前的位置。
例如,假设我在一个名为articles.php的页面上?id = 100阅读一篇长篇文章。然后,系统将我记录下来,因为我已经闲置了一段时间。现在,我使用我的用户名和密码登录。登录后,我想系统将我引回到article.php?id = 100而不是index.php。目前,在每个登录请求中,系统将使用发送到index.php。
第二种情况:我向其他用户发送带有列表的电子邮件(即article.php?id = 100)但该用户未登录,因此系统会自动将他们定向到登录页面。在这种情况下,我也将它们带到article.php?id = 100而不是index.php
问题:如何通过标题('位置:index.php')找出在转移之前请求的网址,以便我可以将用户转移回该网址。如果引用的网站是相同的网址,则必须重定向。
答案 0 :(得分:0)
有很多方法可以解决这个问题,但是在每次更改页面时,您都可以将当前访问的用户uri存储在一个简单的密钥中:值数据存储区,例如SQLite,memcached,甚至是cookie。注销后,您检查该密钥并将用户重定向到该站点。
答案 1 :(得分:0)
您可以在重定向Header('Location: index.php')
之前使用以下代码,并将当前网址提供给登录页面:
$currentUrl = $_SERVER['REQUEST_URI']. '?' .$_SERVER['QUERY_STRING'];
header('Location: index.php?redirectTo=' . urlencode($currentUrl));
然后在登录表单中包含redirectTo
参数作为隐藏输入字段:
<input type="hidden" name="redirectTo" value="<?php echo $_GET['redirectTo']"?>" />
然后您可以在登录后使用它重定向到相关页面:
//after login code
header('Location: '. $_REQUEST['redirectTo']);
exit();//for good measure
根据您使用的框架调整此代码,我假设这里有vanilla php ....