1

我有一个简单的登录系统。比如localhost/login.php 我在使用session时记得用户之前是否登录过。我尝试清除firefox浏览器历史并刷新当前页面(管理员面板页面),页面会被转发到登录页面。

我想知道为什么我只是清除浏览器历史记录并且会话也会被删除?会话存储在服务器中。

4

4 回答 4

4

是的会话存储在服务器上。但是对该会话(session_id)的引用存储在客户端的cookie中。当您使用 cookie 清除浏览器历史记录时,您会丢失服务器上会话存储的参考 ID。

于 2013-04-10T09:39:41.170 回答
2

那是因为会话通常依靠 Cookies(存储在客户端浏览器中)来识别客户端并将其链接到存储的会话。删除历史记录后,会话仍然存在于服务器上,但不再链接到客户端。

会话也可以设置为在 URL 中使用 GET 变量而不是 cookie。但这通常被认为是一种安全风险,因为用户有时倾向于将他们的 URL 发送给其他人。

于 2013-04-10T09:40:24.850 回答
1

function.session-id.php 所示

会话使用 cookie 来保存session_id值。因此,当您清除浏览器缓存/cookies/历史记录时,它也会清除session_id并生成一个新的!

于 2013-04-10T09:38:41.627 回答
1

我同意马亨德拉的观点。存储在$_SESSION[]服务器上,但引用存储在客户端,因此当您清除会话时,客户端会话没有任何值可用于比较会话,因此它也会清除服务器会话。

用于unset($_SESSION[])清除指定的会话对象

于 2013-04-10T10:30:17.907 回答