【问题标题】:PHP mixing up sessionsPHP 混合会话
【发布时间】:2016-12-30 04:56:36
【问题描述】:

我在生产环境中的会话问题已经有几天了

我已经尝试在堆栈溢出中找到大量答案的解决方案,但似乎没有一个对我有用

  1. 用户 A 登录
  2. 用户 B 登录。现在当您返回用户 A 他的会话被用户 B 覆盖。所以我有两个用户“共享” 同一会话。

旁注:

  1. 我使用会话变量在每个页面的最顶部都有 session_start()
  2. 我正在使用带有有效证书的 https
  3. 缓存不是问题,我已经尝试设置标题以避免缓存

我使用的是 PHP 5.4(我之前使用的是 5.6 并降级希望它能解决我的问题),这是我的 PHP.ini:

session.save_path = "/tmp"

session.cookie_secure = 1

session.use_cookies = 1

session.use_only_cookies = 1

session.name = PHPSESSID

session.entropy_length = 32

session.cache_limiter = nocache

session.cache_expire = 180

session.hash_function = sha256

这是我的认证页面的基本结构:

session_start();
... // after connection with the database I retrieve id and name
$_SESSION['id_logado'] = $user_id;
$_SESSION['nome_logado'] = $user_name;

我已经仔细检查了每一页中的每一行代码。没有变量名 $id_logado 所以它不应该干扰它。缓存可能不是问题,因为我有标题以避免在 session_start 之后缓存。我已经联系 bluehost 寻求帮助,他们当然不知道并责备自己。

【问题讨论】:

  • 您对您认为是问题的描述不准确。当用户 B 登录时,他的信息替换了用户 As 的信息。他们没有“分享”任何东西。当用户 B 登录时,您期望会发生什么不同?如果您认为确实存在问题,请向我们展示有问题的代码。
  • 每个会话只能有 1 个用户登录,还是我的逻辑有误?
  • 你能解释一下为什么你认为有一个singleton 会话在哪里?您是如何得出用户 A 的会话正在被替换的结论的?
  • 嗨 Dave,我希望用户 B 将他的用户 ID 保存在他的会话中,但不会更改用户 A 的会话。当用户 B 现在登录时,用户 A 的会话正在更新为用户 B 的 ID。我了解会话对每个用户来说都是独一无二的,而不是对每个人都是全局的
  • @Pogrindis 因为用户 A 使用系统很好,但是当其他人从另一台计算机登录时,他突然变成用户 B。我遇到了一些巨大的安全问题,因为随机用户可以访问管理员帐户

标签: php session caching


【解决方案1】:

我找到了解决办法。

经过进一步的研究,我注意到 /tmp 文件夹只有一个会话文件,而且很大。由于某种原因,会话没有被保存到新文件中,而是被“添加”到同一个文件中。

解决方案:我在我的主驱动器中创建了一个新文件夹并授予 777 权限。更新了我的 php.ini 文件以使用该文件夹而不是 /tmp,现在我有大量的会话正在正确生成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多