Symfony 1.4 错误地将 sf_user 归因于新鲜会话

Symfony 1.4 Mistakenly Attributing sf_user for Fresh Sessions

我 运行 遇到了一个关于 Symfony 1.4 的奇怪(而且非常偶发)的问题。具体来说,我的 Symfony 应用程序(在极少数情况下)显示新的 sessions 登录到我的应用程序,即使它们不是。

我在 header 中使用以下代码来检查 session 是否来自 logged-in 用户。如果是,我们向他们显示问候消息并邀请他们登录:

<?php if ($sf_user->isAuthenticated()) { ?>
  <div class="btn">
    Welcome back, <?php echo $sf_user->getProfile()->getFirstName(); ?>
  </div>
<?php }

但是,有时新的 sessions 会显示来自我们系统的随机用户的欢迎消息。就在最近,有人加载了一个新的 sessions 并收到了一条给我们系统中其他人的 "Welcome" 消息。

重要说明:这是第一次发生这种情况。在尝试了 40 多个浏览器和位置后,我无法重现该问题。

我们使用 Symfony 1.4 和 Symfony 附带的 sfGuard 身份验证。

奇怪的是,虽然上面的代码显示 session 来自登录用户,但该用户没有任何其他登录权限。

如有任何帮助,我们将不胜感激。

我们有一个非常相似的问题。将 session.hash_function 设置为更强的哈希函数对我们有帮助:

session.hash_function = "sha256"

详情

由于 高访问量和短会话生命周期,会话经常被重新生成(即生成新的会话 ID)。

似乎有时会导致会话 ID 冲突:两个不同的用户获得相同的会话 ID。这使得其中一个用户在以另一个用户身份登录时看到了该页面。

不用说它很难调试。我们只是尝试不同的方法来修复或重现问题,但没有成功。将 session.hash_function 设置为 sha256 使问题消失(一年多没有报告新病例)。

关于 PHP 7.1.0

之前的注意事项

他们建议在官方 PHP 文档页面上将 session.hash_function 设置为 sha256http://php.net/manual/en/session.security.ini.php

关于 PHP 7.1.0

的注释

session.hash_function 设置从 PHP 7.1.0 开始被移除。 它现在默认使用强大的功能。