【发布时间】:2013-06-05 05:26:57
【问题描述】:
我使用 Codeigniter(这可能是我的问题的原因),我通过几个 cookie 和会话变量来识别用户。当用户想要注册但根据他们的 cookie 检测到已经有一个帐户时(例如,其他人在他们的计算机上注册了),这是在提交注册表单后控制器中当前发生的情况:
- 如果检测到用户 #4 已有帐户但仍注册:删除 会话和 cookie,然后创建新的用户识别会话和 cookie 作为用户 #5 并继续处理数据库内容。
- 否则,以用户 #4 的身份继续处理数据库内容。
问题:删除会话和/或 cookie 仅在下一页加载时发生,这意味着我注册了用户 4(覆盖当前用户 4)但它变成了用户 5(谁拥有下一页加载后,数据库中没有任何内容)。正确的行为是立即删除,这样当我创建新会话 + cookie 时,它会为用户 #5 正确创建帐户。
如何立即删除会话变量 + cookie,而不是在下一页加载时?
更新: 经过一些测试后会发生这种情况:在下一页加载之前不会删除 cookie;会话变量会立即删除,但不会在下一页加载之前设置。因此需要修复 2 个不同的问题,以便它们都被立即删除并重新设置。
【问题讨论】:
-
问题是即使 CI 会话也是 cookie,并且只有以下请求才可用
-
只需在您的登录页面中无条件地擦除会话。
if (login == successful) { $_SESSION = array() }。那么之前的用户做了什么就无关紧要了。新用户将获得全新的干净会话 -
@DamienPirsy 我使用 CI 会话的数据库存储,所以在我的情况下它们不是 cookie
-
@MarcB 问题是如果用户稍后回来,我会使用 cookie 来显示一些(非敏感)数据;我使用会话来了解用户是否已登录,因此在登录后删除它们会自动将它们注销...会话在 2 小时后或注销时被删除,但当用户返回站点时只有一个cookie,我创建了一些“低信任”会话变量来识别他。
-
您无法在没有页面加载的情况下设置或删除 cookie,因为 cookie 是通过标题设置的。
标签: php codeigniter session cookies