首页 新闻 会员 周边

关于Cookie与Session状态的一点疑问。

0
悬赏园豆:20 [已解决问题] 解决于 2009-09-25 21:05

当一个没有禁用cookie的浏览器请求一个web站点,当前页面使用了Session状态,会有一个带唯一标示符的cookie随页面返回到浏览器,可以使Session状态在页面切换时继续跟踪用户,而当关闭浏览器后,再去请求该站点的相同页面,为什么获取不到原来的Session状态?根本原因是什么?难道是因为每次打开浏览器返回站点时,随页面返回的cookie是属于会话cookie?

isObject的主页 isObject | 初学一级 | 园豆:30
提问于:2009-09-21 21:17
< >
分享
最佳答案
0

记录SessionID的cookie存在浏览器的进程中,浏览器关闭了SeesionID也就随之丢失了。

再开一个浏览器肯定是没法向服务器发送之前的那个SessionID了。

收获园豆:20
Cheese | 小虾三级 |园豆:509 | 2009-09-22 16:13
其他回答(1)
0

  Session 是如何来判断客户端用户的呢?它是通过 Session ID 来判断的,什么是 Session ID,就是那个 Session 文件的文件名,Session ID 是随机生成的,因此能保证唯一性和随机性,确保 Session 的安全。一般如果没有设置 Session 的生存周期,则 Session ID 存储在内存中,关闭浏览器后该 ID 自动注销,重新请求该页面后,重新注册一个 session ID。

如果客户端没有禁用 Cookie,则 Cookie 在启动 Session 会话的时候扮演的是存储 Session ID 和 session 生存期的角色。

假设客户端禁用 Cookie 怎么办?没办法,所有生存周期都是浏览器进程了,只要关闭浏览器,再次请求页面又得重新注册 Session。那么怎么传递 Session ID 呢?通过 URL 或者通过隐藏表单来传递,PHP 会自动将 session ID 发送到 URL 上,URL 形如:http://www.openphp.cn /index.php?PHPSESSID=bba5b2a240a77e5b44cfa01d49cf9669,其中 URL 中的参数 PHPSESSID 就是 Session ID了,我们可以使用 $_GET 来获取该值,从而实现 session ID 页面间传递。

风浪 | 园豆:2996 (老鸟四级) | 2009-09-22 16:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册