假设我想导航到联系页面。但为了到达那里,该网站要求我登录。登录后,我应该被重定向到联系页面,但我在别的地方。我该怎么做才能让我在登录后重定向到我想要的页面?使用PHP登录后重定向到上一页
我有一种强烈的感觉,认为这与会话有关,但仍然如此。该方法应该是什么?
假设我想导航到联系页面。但为了到达那里,该网站要求我登录。登录后,我应该被重定向到联系页面,但我在别的地方。我该怎么做才能让我在登录后重定向到我想要的页面?使用PHP登录后重定向到上一页
我有一种强烈的感觉,认为这与会话有关,但仍然如此。该方法应该是什么?
你有三种常用的方法:
(1)看起来像:
<?php
session_start();
if (!$_SESSION['userid']) {
$_SESSION['page'] = '/contact';
header('Location: /login');
exit;
}
...
?>
成功登录检索$_SESSION['page']
和重定向。
(2)除了没有会话变量之外是相似的。相反,您有:
header('Location: /login?return=/contact');
要通过重定向。登录页面必须将其作为隐藏的表单域包含在页面中,以向用户提供用户名和密码的请求。
(3)类似但不重定向到单独的页面。相反,每个页面都可能成为登录页面。如果用户未登录,则会显示登录表单。该网址仍然是“/ contact”。每个页面都会检测并处理登录尝试。
这种方法的优点是少了一次外部重定向,并且处理提交的表单更容易。通过这个我的意思是想象有人在你的一个页面上填写表格,然后点击提交。系统看到他们的登录已过期。如果您将用户重定向到新页面然后重定向回来,他们可能需要重新输入所有表单字段。如果隐式处理登录,则可以将所有表单字段包含为隐藏输入,并且一旦登录就可以将其无缝地视为原始页面的提交。
3.将prev页面存储为GET变量:) – n00b 2010-02-21 23:56:57
的方法,我通常使用:
$_SERVER['HTTP_REFERER']
变量(这将是设置为用户来自的页面,即联系页面)并将其作为隐藏字段存储。它的美妙之处在于,它自动适用于所有需要登录的页面,而无需在每个页面上设置会话变量。
需要注意的一点是,登录时应检查引荐者中的页面是否位于您的网站上,而不是完全不同的网站,以防用户碰巧来自Google。
我倾向于重定向到登录页面,在查询字符串中传递当前URL。
页面保护
session_start();
if (!isset($_SESSION['user_id']))
{
// Fetch current URL
$this_url = $_SERVER['REQUEST_URI'];
// Redirect to login page passing current URL
header('Location: login.php?return_url=' . urlencode($this_url));
exit;
}
// Continue processing
echo 'Hello from this page';
登录页面
session_start();
// Simulate logging in user
$_SESSION['user_id'] = 1;
// Fetch URL to redirect to
$return_url = isset($_GET['return_url']) ? $_GET['return_url'] : 'site_home.php';
// Redirect back
header('Location: ' . $return_url);
在上面的代码我只是模拟登录的过程。通常情况下,用户应通过提交其凭据一个表单,证书被验证,然后用户登录。重定向回页面的URL必须通过这个过程来维护。您可以继续传递查询字符串中的URL或通过表单中的隐藏输入字段。
谢谢,它帮助我解决了类似的需求..... – Pushpendra 2011-02-24 06:56:07
好问题,欢迎来到:) :) – 2010-02-22 00:41:59
好的问题,我认为很多程序员需要知道它的答案。谢谢。 – TopDeveloper 2012-01-30 06:48:15