我正在尝试实现一种功能,该功能可以在登录前将用户重定向到他尝试访问的URL /地址。
例如:
如何在用户成功登录后将用户重定向到“第1步”网址?
我希望我能够解释我想要做的事情。
感谢(提前)获得任何帮助和建议: - )
答案 0 :(得分:6)
将请求网址存储在登录表单的隐藏字段中,并在登录后重定向到该网址
答案 1 :(得分:6)
您可以在网址中传递该网址:
if (!$loggedIn) {
header('Location: http://example.com/login?return='.urlencode($_SERVER['REQUEST_URI']));
exit;
}
成功登录后:
if ($loginSucessful) {
if (isset($_GET['return']) && substr($_GET['return'], 0, 1) == '/')) {
header('Location: http://example.com'.$_GET['return']);
} else {
header('Location: http://example.com/');
}
exit;
}
答案 2 :(得分:3)
在重定向到登录页面之前将其存储在会话中(或者甚至是cookie)
答案 3 :(得分:3)
过去,我已重定向回到身份验证页面,其中“最终目的地”页面包含重定向网址:http://example.com/login?redirect=/secured/resource。
请记住对参数值进行URL编码。此外,在处理重定向URL的值时,请确保它是您站点上的URL或相对URL,以避免任何安全攻击,如网络钓鱼方案。否则,第三方可以定位您网站的登录页面,然后重定向回其网站,并可能访问该用户的安全会话。
我不使用会话来存储URL的原因是,搜索引擎蜘蛛最终会在您的网站上点击受保护且需要登录的链接时创建会话。由于他们必须拥有凭据,因此会话创建仅在30分钟后超时。
答案 4 :(得分:2)
在会话中存储要好得多。它允许用户关注链接(例如注册链接),并在登录后仍然可以重定向到原始页面。
答案 5 :(得分:2)
我见过论坛将其放入网址,例如www.myurl.com?prevUrl=<prevUrl>。当然,存储的url必须使用encodeURI进行编码。
答案 6 :(得分:1)
你可以使用我真正喜欢的东西:HTTP身份验证。这样你就没有重定向到中间的特殊登录页面,深层链接就可以正常工作。 Trac得到了这个权利,imho。
另一个选项是您将URL存储在您可能正在创建的会话中。如果您在登录时没有销毁会话,则可以在登录后使用该会话重定向到深层链接。