日期:2014-05-16  浏览次数:20693 次

IE6下Ajax请求后台页面获取的SessionId和前台不一样
做一个退出登录的超链接

当点击时,向后台发出ajax请求,在后台清除登录时的SESSION
context.Session.Remove("username");

然后再用跳转语句刷新页面(逐个去隐藏和修改页面上的信息太麻烦了)
window.location.href = "index.aspx";

在页面初始化时判断如果Session里的username值为null的话就显示“登录系统”
如果有值就显示“退出系统”

测试在IE9和Firefox下都没问题
但是IE6,IE7下Session中一直有值。菜单上一直显示“退出系统”。
设置断点看了下context.Session.Remove("username");确实执行了
但还是清除不掉登录信息。。。在PageLoad里判断Session的时候,还是有值

后来发现在IE6下,登录时的SessionID和我在后台清空的SessionId不是一个。。所以尽管后台清空了Session,登录时的会话还在。。

而在IE9或火狐下都是一个SessionId。。

为什么会出现这种情况啊?


------最佳解决方案--------------------
没碰到过这种情况。。

在remove session前输出sessionid提供给ajax,ajax请求完毕后输出返回的内容和document.cookie,看cookie中的ASPSESSIONIDCSBQCQQB=内容这个是否一致
------其他解决方案--------------------
我把配置文件里<SessionState> 的cookieless属性值改为true 就正常了,但是浏览器url变的很长,有没有办法 不改变url又能保证session不丢失呢?

我修改SessionState的mode属性值为StateServer,然后开启状态服务,但是仍然不管用。