如果用户在会话超时后被迫再次登录,我正在尝试找到一种方法将用户重定向到他们选择的页面。
现在,在用户登录后,他们被重定向到 index.php。但是,如果用户在电子邮件中收到指向我网站不同部分的链接并且他们一整天都没有登录,他们显然会被要求登录,但最终会出现在 index.php 而不是链接所在的页面上.
这是我在登录页面中的代码片段:
if (mysql_num_rows($result_set) == 1) {
// username/password authenticated
// and only 1 match
$found_user = mysql_fetch_array($result_set);
$_SESSION['user_id'] = $found_user['id'];
$_SESSION['username'] = $found_user['username'];
$_SESSION['last_activity'] = time();
$_SESSION['time_out'] = 7200; // 2 hours
redirect_to("index.php");
任何想法都会有所帮助。
我要感谢所有回答我问题的人。解决方案是我在这里收到的一些建议的组合。我想和你分享我是如何解决这个问题的:
我无法保存用户在被迫再次登录之前尝试访问的 url 的部分原因是我的会话由一个外部 php 文件处理,该文件负责确认登录和使当前会话到期。我网站上的所有页面都需要此文件。HTTP_REFERER 不起作用,因为它总是设置为 login.php。这是我对 session.php 文件所做的:
session_start();
$protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https')
=== FALSE ? 'http' : 'https';
$host = $_SERVER['HTTP_HOST'];
$script = $_SERVER['SCRIPT_NAME'];
$params = $_SERVER['QUERY_STRING'];
$currentUrl = $protocol . '://' . $host . $script . '?' . $params;
if ($currentUrl != "http://domain.com/login.php?") {
$expiryTime = time()+(60*5); // 5 mins
setcookie('referer',$currentUrl,$expiryTime,'/');
}
本质上,我将引用 URL 保存在一个 cookie 中,该 cookie 设置为在 5 分钟后过期,从而为用户提供足够的登录时间。然后,在 login.php 我这样做了:
if(isset($_COOKIE['referer'])) {
redirect_to($_COOKIE['referer']);
} else {
redirect_to('index.php');
}
而且,宾果游戏!每次都有效。