2011-11-21 184 views
1

对不起,如果我没有告诉你的代码,因为我不知道如何实现它。我只想知道,例如在YouTube中,当您想要对视频发表评论时,您必须先登录,那么如何将您重定向到您要发表评论的上一个视频页面。我想我需要将上一页的网址存储到会话中,但如果用户没有登录,我是否还可以跟踪网址,对不起,我很困惑。我想这样做在PHP中,任何人都可以帮我一下吧,在此先感谢:)返回注册页面登录后

回答

0

你可以简单地使用这样的东西.. !!

当用户需要重定向回页面时,假设他想对post.php页面发表评论,但是当他尝试发表评论时,如果尚未登录,它将重定向到登录。,因此,在玉重定向他到登录页面,发送GET参数到登录页面就像

http://example.in/login.php?redirect_url=http://example.in/post.php

现在处理这个在页面login.php中获得参数,当凭据进行身份验证你可以重定向他回到通过get参数发送的URL。

您的login.php可以是这样的

$redirect_url = $_GET['redirect_url']; 
if(authenticated) 
{ 
    header("Location: $redirect_url"); 
} 
else 
{ } 

希望这有助于

0

header('Location: '. $_SERVER["HTTP_REFERER"]);

这是最简单的方法。它会自动将用户重定向到他来自的页面,以防启动引用者(默认)。

+0

该尽快打破的使用输入错误时他的密码或身份验证需要超过一个页面。 –

+0

我知道,你是对的。我认为$ _GET的方式比Olaf提到的要好得多。 – sascha

0

您可以将链接存储在链接到您的登录页面的URL中。然后您可以读取$ _GET值并相应地处理它。

+0

嗨,对不起,我有一个不好理解,你可以进一步详细请 – smith

0

我倒是建议传递回URL作为GET参数:

$login_url = 'http://example.com/login.php?return=' . rawurlencode($_SERVER['REQUEST_URI']); 

使用会话两点之间定期发送信息的使用打开多个标签能够尽快毁了浏览体验。

登录后,使用header()生成HTTP重定向:

if(isset($_GET['return']) && substr($_GET['return'], 0, 1)=='/'){ 
    header('Location: http://example.com' . $_GET['return']); 
    exit; 
}else{ 
    header('Location: http://example.com/'); 
    exit; 
} 
+0

嗨,为什么substr($ _ GET ['return'],0,1)=='/'? – smith

+0

只是为了确保骗子不使用我们的登录表单重定向到其他网站,并可能让用户在该网站重新输入密码。 –

+0

谢谢但返回字符串的第一个字符中没有'/'?对不起我的不理解 – smith

0

由于每个页面必须检查自己的登录用户呢(认证),我不会明确地称之为登录页面。相反,目标页面将在必要时调用它,并将其自身存储为登录目标(会话)。

例子:

article.php需要调用article_comment.php,但评论页面需要与login.php登录。登录页面应该在成功登录后调用评论页面。

  1. article.php直接调用article_comment.php
  2. article_comment.php页面检查用户是否已经登录,并在必要时调用login.php。在它重定向到login.php页面之前,它将自己的登录目标存储为$_SESSION['loginTarget'] = 'article_comment.php';
  3. 登录页面成功完成后,会调用登录目标。 header('Location: '.$_SESSION['loginTarget'], true, 303); exit;

这样不会中断联系的自然的方式(article.php可以直接调用article_comment.php)。由于登录目标存储在会话中,因此您可以轻松地在登录页面上执行错误处理,甚至可以创建新的用户帐户。对登录用户的检查无论如何都做了,为什么不使用它在必要时请求登录?