【发布时间】:2016-12-30 04:56:36
【问题描述】:
我在生产环境中的会话问题已经有几天了
我已经尝试在堆栈溢出中找到大量答案的解决方案,但似乎没有一个对我有用
- 用户 A 登录
- 用户 B 登录。现在当您返回用户 A 他的会话被用户 B 覆盖。所以我有两个用户“共享” 同一会话。
旁注:
- 我使用会话变量在每个页面的最顶部都有 session_start()
- 我正在使用带有有效证书的 https
- 缓存不是问题,我已经尝试设置标题以避免缓存
我使用的是 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。我遇到了一些巨大的安全问题,因为随机用户可以访问管理员帐户