问题描述
最近写项目时发现一个问题:a.aspx页面:Session["a"]="123";b.aspx页面取Session["a"]为空;调试后发现在b页面中sessionid变了。奇怪的是我在Global文件中也给session赋值:protectedvoidSession_Start(objectsender,EventArgse){//与a页面一样的写法Session["a"]="123";}此时在b页面就可以取到Session["a"]的值,且是Global里的Session["a"]a页面的session一直取不到!求各位大神给个思路和解决办法!
解决方案
解决方案二:
session本来就是“不稳定”的,应该尽量避免使用。传值有url、post、cookie、Server.Transfer等多种方式。
解决方案三:
我的session用来保存用户登录信息的,其他存储方式都不安全啊
解决方案四:
session不应该会变啊是同一个会话吗?
解决方案五:
肯定是同一个页面同一个会话啊
解决方案六:
页面跨域了?
解决方案七:
没有跨域,就是同一个项目下的两个aspx页面
解决方案八:
你A页面直接给SESSON值,B页面取不到么?如果取不到就是IE问题,你看看是不是COOKIE关了
解决方案九:
Global文件中也给session赋值b页面是能取到值的,所以不是cookie关了
解决方案十:
你不是session丢失,你是sessionid变了,你是在一个浏览器里打开的a和b吗?同一个浏览器里面的话,你是不是设置了不同标签不共享一个会话,你可以换其它浏览器测试下,或者还原浏览器默认设置试试
解决方案十一:
把A页面导航到B页面(或者反过来)的代码贴出来,两个页面分别是如何打开的?
解决方案十二:
Session保存登录信息,然后写在Global里面?
解决方案十三:
引用10楼sp1234的回复:
把A页面导航到B页面(或者反过来)的代码贴出来,两个页面分别是如何打开的?
a.aspx:Session["a"]="123";response.redirect("b.aspx");b.aspx:stringstr=Session["a"].tostring();经过我的测试,可能是我之前更改过cookie作用域的关系,但是我把更改cookie的作用域禁掉后,有时正常了,有时sessionid又变了,session也丢失了......
解决方案十四:
显然你没有说明a是如何打开的,也没有说明b是何时打开的。要了解”页面是如何打开的“你就仅仅写这样两行代码吗?怪不得诊断不出任何问题。这两行代码放在不同地方,完全可能访问不同的Session。仅贴出这样两行代码没用。如果说不明白,你就贴出一个单独的demo程序来,用2个文件、10几行代码来重现你的问题。看来你应该少提问,多自己测试。
解决方案十五:
以下几点建议:1)Session的确不是很稳定,尤其是在web.config中的sessionState节点属性为mode="InProc"时,建议配置成"StateServer",并借助services.msc启动该服务;2)检查a.aspx和b.aspx两个页面是否始终在同一个浏览器窗口中打开,不要出现弹窗打开或新标签打开。