记住URL,直到身份验证完成

时间:2009-10-31 14:57:35

标签: php url url-routing

我如何记住php中的URL以在身份验证后将其提供给用户。这个想法是用户将请求URL但未经身份验证。在这种情况下,我将他转发到登录页面,但保存该URL的最佳做法是,一旦经过身份验证,我就可以将其提供给他。我想过将它保存在会话变量中,但不确定实现。对此有最佳实践吗?

2 个答案:

答案 0 :(得分:4)

将其放在表单中的隐藏字段中,或将其保存到会话变量中。

实施例

login.php?l = account.php(其中l是登录后要去的页面。)

<form action="action/login.php" method="post">
<input type="hidden" value="<?php echo $_GET['l'] ? $_GET['l'] : 'index.php'; ?>" name="redirect" />
...
</form>

动作/ login.php中

<?php

  ... do some checking here...

  if($loggedin){

    redirect($_POST['redirect']);
    // redirect() a wrapper function for header("Location: $url");

  }else{

    redirect('login.php?l='.$_POST['redirect']);
    // go back to login page

  }

?>

答案 1 :(得分:2)

当用户未经身份验证前往ProtectedPage.php时,应自动将其重定向到LoginView.php(附加上一页的网址)。然后,他们可以继续登录,LoginAction.php页面会将其重定向回ProtectedPage.php

ProtectedPage.php

<?php
    if (!$authenticated) {
        header("Location: /LoginView.php?r=ProtectedPage.php");
    }
?>

LoginView.php

<form action="LoginAction.php" method="post">
<input type="hidden" id="r" value="<?php echo $_GET['r'] ?>" />
...
</form>

LoginAction.php

<?php
    ... Authenticate the user ...

    if (!empty($_POST['r'])) { header("Location: {$_POST['r']}"); }
    else { header("Location: /"); }
?>