我有一个简单的登录系统。比如localhost/login.php 我在使用session时记得用户之前是否登录过。我尝试清除firefox浏览器历史并刷新当前页面(管理员面板页面),页面会被转发到登录页面。
我想知道为什么我只是清除浏览器历史记录并且会话也会被删除?会话存储在服务器中。
是的会话存储在服务器上。但是对该会话(session_id)的引用存储在客户端的cookie中。当您使用 cookie 清除浏览器历史记录时,您会丢失服务器上会话存储的参考 ID。
那是因为会话通常依靠 Cookies(存储在客户端浏览器中)来识别客户端并将其链接到存储的会话。删除历史记录后,会话仍然存在于服务器上,但不再链接到客户端。
会话也可以设置为在 URL 中使用 GET 变量而不是 cookie。但这通常被认为是一种安全风险,因为用户有时倾向于将他们的 URL 发送给其他人。
会话使用 cookie 来保存session_id
值。因此,当您清除浏览器缓存/cookies/历史记录时,它也会清除session_id
并生成一个新的!
我同意马亨德拉的观点。存储在$_SESSION[]
服务器上,但引用存储在客户端,因此当您清除会话时,客户端会话没有任何值可用于比较会话,因此它也会清除服务器会话。
用于unset($_SESSION[])
清除指定的会话对象