不完整的GET值

时间:2012-06-14 12:45:11

标签: php get

好的,我有post.php页面。如果您尚未登录,则会重定向到login.php,所以这是我的代码

if($login == 0) {
    $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    header("Location: login.php?r=".$url);
}

在我的login.php页面中(如果用户名和密码正确,我只会创建一个快捷方式)

if($accountmatch == 1) {
    // make sessions
    if(isset($_GET['r'])) {
        $r = $_GET['r'];
        header("Location: ".$r);
    } else {
        header("Location: index.php);
    }
}

所以我的问题就是这个,当我登录时,页面将我引导到我想要的页面,但GET值不完整。

例如$ r的值是

localhost/mywebsite/post.php?mode=addtopic&f=1

所以当我到达login.php页面时,网址是

localhost/mywebsite/login.php?r=http://localhost/mywebsite/post.php?mode=addtopic&f=1

因此,当我登录时,它会将我重定向到此页面。

localhost/mywebsite/post.php?mode=addtopic

显然“&”标志结束我的网址,使f在我的原始网址中分开。

我如何附上它们?提前谢谢!

修改

我知道我可以使用这个

$f = $_GET['f'];

header("Location: ".$r."&f=".$f);

但还有其他方法吗?谢谢!

2 个答案:

答案 0 :(得分:6)

查看urlencode()功能。

请注意XSRF,如果我将用户发送到http://yoursite/login.php?r=http://mysitethattotallylookslikeyours/pleaseLoginAgainAnErrorHasOccurred.php,他们可能会放弃他们的凭据。

为此,您只需将路径和查询字符串用作r的值,然后重定向到"http://yoursite/" . $r

答案 1 :(得分:0)

如果您的表单使用post发送数据,则需要考虑如何传递GET数据以使您的URL正确。