IE8Session丢失问题

现象:

====================================来自互联网=====================================

Session cookie 被广泛用来做用户身份校验。 相比IE7, IE8的Session 管理有很大变化, 这是Web 开发者需要注意的。
IE7中,同一个窗口(IE 进程)共享一个session。
IE8中,所有打开的IE窗口(IE 进程)共享一个session。除非,用户通过菜单 File > New session 打开新窗口,或者使用命令行参数 iexplore.exe -nomerge 来打开IE。 另外,当所有IE窗口被关闭后,session 结束。

session虽然是在服务器端,但服务器端那么多session,服务器如何判断你的session是哪个呢?
这就需要客户端传送自己的session_id到服务器端,这样才能一一对应。
而session_id的存放是可根据你的服务器配置而定,默认是存放在cookie中,如果cookie禁用的话,那么就无法发送session_id,也就无法找到自己的session。而此时需要在每个链接后面加上session_id,这样就可以正常访问自己的session.

已知解决方法:

把cookie设置成可用,点击IE-工具-IE选项-隐私-高级-替代自动cookie处理打上对勾-总是允许会话cookie打对勾-点击应用-确定即可。

====================================来自互联网=====================================

URL中传递SESSION ID的方法

由于session也依赖于cookie,因此若客户端禁用cookie,session将失效。

解决的方法是在url中传递session id,这在linux/unix主机中会自动实现

需要保证php.ini中的session.use_only_cookies配置为0(为默认值),才可使用url传递。

url传递session id的几种方法:

1、在连接到另外的页面时,使用 url?SID 的方式通过url传递session

2、也可设置php.ini中的session.use_trans_sid = 1,使得每一个页面中的连接在跳转时候自动附加上SID。


通过url传递SID会带来安全上的风险,主要是附带sid的url传递给第三方后,第三方可能获取该session id对应存在服务器上的session变量。

为此有以下变通的安全方法:

1、通过隐藏表单传递,达到隐藏session id的目的??

2、在服务器端保存session id(通过文本或数据库)

如在page1中session_start()后,将session id保存到服务器的一个文件中,在跳转到page2后,首先打开该文件,从文件中取出$sid(具体名自定),然后使用session_id('$sid')将page2中的session id设置成和page1中的一样,再session_start()即可。

你可能感兴趣的:(session,互联网,服务器,Cookies,IE,url)