对于用户身份验证,我的客户端重定向到服务器并获取用户数据,并将其存储在客户端的php本机会话中。在此过程中,服务器重定向回相同的请求URL,因此如果没有响应数据,则客户端将不会有任何会话,并且我的脚本将以重定向循环结束,因为只有在找不到会话时才会检查重定向到服务器。
现在为了避免这种情况,我使用uniqid('prefix_')函数在第一次流后创建一个随机会话。但如果有人刷新页面,请求应再次转到服务器进行身份验证。
为此,我正在检查会话cookie值。如果cookie有我给定的前缀(在uniqid中给出),那么它不是有效的会话并重定向到服务器。我想知道这个选项有多可靠?我还有其他解决方案吗?
更新: 这是我的validSession函数的样子:
public function validSession() {
if ($sessionCookie !== null && substr($sessionCookie,0,7) !== 'prefix_')
return true;
return false;
}
因此,如果会话cookie包含用于在没有来自服务器的数据的情况下创建随机会话的前缀,则此函数将返回false,我将决定重定向到服务器以进行用户会话。
答案 0 :(得分:0)
听起来像流量控制问题。如果登录失败,请不要重定向。
@session_start();
$user = Auth::login($username, $pwd);
if (!empty($user))
{
$_SESSION['auth_user'] = $user;
session_write_close();
header('Location: '.$_REQUEST['next']);
}
else
{
header('Location: '.Auth::STANDARD_LOGIN_URL);
}
此示例使用psuedo Auth类,使用静态登录方法(失败时返回用户或false / null),以及定义登录位置的常量。