【问题标题】:check on uniqid for session检查会话的 uniqid
【发布时间】:2011-05-18 11:21:48
【问题描述】:

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

【问题讨论】:

  • 没有代码太混乱了..请在您的问题中添加代码..

标签: php session cookies unique-id


【解决方案1】:

听起来像是流量控制问题。如果登录失败,请不要重定向回来。

@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)和定义登录位置的常量。

【讨论】:

  • 抑制由session_start() 引起的潜在错误(例如无法设置会话cookie)是以后遇到难以调试的问题的好方法。
  • 通常不需要调用session_write_close() - 它是自动完成的。仅当脚本在完成访问会话后要执行一些耗时的事情时才需要它。
  • 我可以接受这个论点——但是代码中的第一个问题是,如果你有一堆代码,你就不容易知道会话是否已经开始......并且适当的管理设置会使我的简化演示大大复杂化。这是我的标准类对所有会话管理都有抽象的原因之一。
  • @ThiefMaster - 完全不同意 session_write_close 参数,如果您正在执行立即重定向 - 这绝对是调用 session_write_close 的最重要时间。否则,它可能会因为 PHP 生命周期在客户端为重定向而重置新 URL 调用时关闭而丢失。
  • 为什么不简单地exit() 发送标头后?除此之外,浏览器在收到所有内容之前不会处理重定向 - 在这种情况下,脚本已经终止并因此关闭了会话。
猜你喜欢
  • 2015-02-15
  • 1970-01-01
  • 2014-11-08
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-02
相关资源
最近更新 更多