我根本不会使用cookies。
Method 1
一种可能的方法是将访问的链接存储到会话变量中,然后当用户到达 login.php 页面时,提供到会话变量给出的 $url 的标头重定向。
将此代码粘贴到网站或主容器上的所有页面中。
<?php
session_start();
$_SESSION['url'] = $_SERVER['REQUEST_URI'];
对于登录页面,您可以有:
<?php
session_start(); // needed for sessions.
if(isset($_SESSION['url']))
$url = $_SESSION['url']; // holds url for last page visited.
else
$url = "student_account.php";
header("Location: http://example.com/$url");
Method 2
到目前为止,一个更简单的解决方案就是:
<hidden name="redirurl" value="<? echo $_SERVER['HTTP_REFERER']; ?>" />
然后在他们登录后重定向到该地址。
但是,只有当每个页面上都有登录框时,这才有用。
$_SERVER['REQUEST_URI']
将仅保留当前页面。你想做的是使用$_SERVER['HTTP_REFERER']
。
因此,将 HTTP_REFERER 保存在表单上的隐藏元素中,但还要注意,在处理表单的 PHP 中,您将需要一些逻辑,以便在登录失败时重定向回登录页面,同时还要检查引用者是否实际上是您的网站,如果不是,则重定向回主页。
Method 3
另一种常见的方法是通过 $_GET 变量将用户的当前页面传递到登录表单。
更改您的脚本,以便也告诉登录页面记住您所在的位置:
Note: $_SERVER['REQUEST_URI']是您当前的页面
header("Location:login.php?location=" . urlencode($_SERVER['REQUEST_URI']));
现在检查它是否已填充,然后将用户发送到此:
登录.php
echo '<input type="hidden" name="location" value="';
if(isset($_GET['location'])) {
echo htmlspecialchars($_GET['location']);
}
echo '" />';
// Will show something like this:
// <input type="hidden" name="location" value="previousPage.php" />
登录检查.php
session_start();
// our url is now stored as $_POST['location'] (posted from login.php). If it's blank, let's ignore it. Otherwise, let's do something with it.
$redirect = NULL;
if($_POST['location'] != '') {
$redirect = $_POST['location'];
}
if((empty($username) OR empty($password) AND !isset($_SESSION['id_login']))) {
$url = 'login.php?p=1';
// if we have a redirect URL, pass it back to login.php so we don't forget it
if(isset($redirect)) {
$url .= '&location=' . urlencode($redirect);
}
header("Location: " . $url);
exit();
}
elseif (!user_exists($username,$password) AND !isset($_SESSION['id_login'])) {
$url = 'login.php?p=2';
if(isset($redirect)) {
$url .= '&location=' . urlencode($redirect);
}
header("Location:" . $url);
exit();
}
elseif(isset($_SESSION['id_login'])) {
// if login is successful and there is a redirect address, send the user directly there
if($redirect)) {
header("Location:". $redirect);
} else {
header("Location:login.php?p=3");
}
exit();
}