我有一个名为Login.php
的网页。我需要在最后一页之前的页面的URL。
当用户登录表单提交给check_login.php
时,会检查其用户名和密码。然后我会将用户重定向到index.php
。
问题是我希望将用户重定向到他们访问过的倒数第二页。
实施例
第一个网址: www.example.com/posts/1
第二个网址: www.example.com/login.php
第三个网址: wwww.example.com/check_login.php
因此,如果用户名和密码正确=> header('location: www.example.com/posts/1');
有一个解决方案可以获取以前的网址:
// login.php
$_SESSION['url'] = $_SERVER['HTTP_REFERER'];
// check_login.php
header('location: '.$_SESSION['url']);
但我需要获得倒数第二个URL,而不是最后一个URL。我怎么能用PHP做到这一点?
答案 0 :(得分:4)
做其他人做过的事情:
第一个解决方案:
在您的网页中创建一个hidden
字段,这样当用户点击login
时,就会将他带到前一个链接的login.php
页面。然后,您可以使用此链接执行任何操作(例如,将其保存到$_SESSION['url']
)。
第二个解决方案:
想象一下你有这样一个锚:
<a href="login.php">login</a>
。
您可以使用login.php
而不是仅使用login.php?redirect_to=http://example.com/post/1
,这样您就可以通过login.php
请求访问$_GET['redirect_to']
页面中的网址。
注意:始终记得清理用户输入数据。
答案 1 :(得分:1)
但我想知道有一种方法可以直接获得两个以前的网址吗?
是的,您需要会话。 e.g
if(!isset($_SESSION['url']))
$lurl = array();
else
$lurl = $_SESSION['url']);
$count = count($lurl);
$lurl[$count % 2] = $_SERVER['HTTP_REFERER'];
$_SESSION['url'] = $lurl;
警告:(php manual) 将用户代理引用到当前页面的页面地址(如果有)。这是由用户代理设置的。并非所有用户代理都会设置此功能,有些用户可以将HTTP_REFERER修改为功能。简而言之,它无法真正被信任。
答案 2 :(得分:1)
我认为@ GinoDeMaria的答案有效,但它正在进行一些不必要的检查,并且仍在进行多次调用以分配变量。
使用会话
所以更简单的方法是:
$_SESSION['2last_url'] = isset($_SESSION['last_url']) ? $_SESSION['last_url'] : null;
$_SESSION['last_url'] = $_SERVER['HTTP_REFERER'];
因此$_SESSION['2last_url']
包含您要查找的值。
现在Gino说用户代理并不总是正确设置$_SERVER['HTTP_REFERER']
。
在请求中使用REDIRECT VALUES
这种方法更优雅,可以证明更有用。只需告诉check_login.php
登录后重定向用户的位置。
首先,我们告诉登录页面重定向的位置。因此,我们转到login.php
,而不是前往login.php?redirect=http%3A%2F%2Fexample.com%2Fpost%2F1
。 (您可能会注意到重定向网址看起来很奇怪,这是由于网址编码造成的。use a tool like this或check out PHP's urlencode() function)。
现在在您的login.php
中,您必须添加一个包含此值的隐藏字段:
<input type="hidden" name="redirect" value="<?php echo $_GET['redirect']; ?>">
然后在check_login.php
中获取该值:
header("Location: " . $_POST['redirect']);
然后你去。