1

对于用户身份验证,我的客户端重定向到服务器并获取用户数据,并将其存储到客户端的 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,我将决定重定向到服务器以进行用户会话。

4

1 回答 1

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);
}

此示例使用伪 Auth 类,具有静态登录方法(返回用户或失败时返回 false/null)和定义登录位置的常量。

于 2011-05-18T11:29:37.797 回答