如何在php

时间:2015-08-18 15:25:23

标签: php session url

我有一个名为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做到这一点?

3 个答案:

答案 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 thischeck out PHP's urlencode() function)。

现在在您的login.php中,您必须添加一个包含此值的隐藏字段:

<input type="hidden" name="redirect" value="<?php echo $_GET['redirect']; ?>">

然后在check_login.php中获取该值:

header("Location: " . $_POST['redirect']);

然后你去。