原本去年在做项目时,写好的一记篇博客分享给大家。
Asp.net页面跳转Session丢失问题
编写人:CC阿爸
2014-4-2
l 近来在做泛微OA与公司自行开发的系统集成登录的问题。在使用Response.redirect跳转时,Session变量会丢失的问题。
经过在网上搜索部分解决方案,大致可以归类为以下几种情况
改变session的存储介质,默认为InPRoc,还有另外两种方式,StateServer和SQLServer。
这里把mode改为StateServer,默认的inproc虽然方便好用,但是非常容易出现session丢失的问题,
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" cookieless="false" timeout="20" stateNetworkTimeout="10"/>
解决办法是在服务器响应时输出P3P的主机头声明:
if (context.Request.Browser.Browser.ToUpper().Contains("IE"))
context.Response.Headers.Add("P3P", "CP=CAO PSA OUR");
综上发现,我使用的是第三种,因此常会出现session丢失的问题,使用第一二种解决方法未能解决。
于是仔细观察了httpwatch中截获的请求,发现Cookies选项中在跳转之前是空的,这个里面应该存储了当前session的id才对,于是就想如果我在Redirect之前就将session的id放到Cookies中是不是就能解决这个问题了呢。果然不出所料,修改完后问题解决了。
Response.Cookies.Add(newHttpCookie("ASP.NET_SessionId", Session.SessionID));
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", Session.SessionID));
Response.Redirect("index.htm",false);
后来想到,这个问题还有一个比较简单的解决办法就是:
Server.Transfer("index.htm ")
新闻热点
疑难解答