码迷,mamicode.com
首页 > Web开发 > 详细

ASP.NET Response.Redirect 丢失 Session的问题

时间:2014-11-04 22:21:55      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   使用   java   sp   strong   div   

以前在做ASP.NET开发时一直没注意到一个问题,就是广泛使用的Response.Redirect方法并不会将服务器端在Response中新增或修改的Cookie返回给客户端浏览器,而网站的Session一般来说又是通过Cookie来做客户端唯一标识的,这就会使得当浏览器第一次通过Get方法发送请求到服务器后(由于是客户端浏览器第一次访问服务器,所以这时客户端浏览器中还没有Cookie存储SessionID),在服务器返回的响应中得不到带有SessionID的Cookie,使得浏览器在下一次发送请求给服务器端时,在请求中还是读不到带有SessionID的Cookie,服务器端又会再创建一个新的Session,导致第一次请求在服务器上创建的Session丢失。注意导致这个问题的前提条件:浏览器第一次发送请求到服务器端,服务器端使用了Response.Redirect方法,使得生成的带有SessionID的Cookie不会发送回客户端浏览器。

 

示例代码,浏览器发送第一次请求到xxx.aspx中设置Session值,然后跳转到页面yyy.aspx后,yyy.aspx中读不到xxx.aspx中设置的Session值,并且在Request.Cookies中生成了一个和xxx.aspx不同的SessionID.

Session["xxx"] = xxx;
Response.Redirect("yyy.aspx");

这就是因为xxx.aspx中的Response.Redirect没有将生成的SessionID通过Cookie传回浏览器,使得浏览器在发送请求到yyy.aspx时,服务器端检测不到带SessionID的Cookie,生成了新的Session启动了新会话,那么自然也就得不到在xxx.aspx中设置的Session值了。

 

解决方案:

在浏览器还没有得到服务器端生成的SessionID前,服务器端尽量不要使用Response.Redirect方法做跳转,而是用替代方案做客户端URL地址跳转,比如通过Javascript来设置浏览器的window.location属性。这样当浏览器获得第一个请求的服务器端响应时,就能得到带SessionID的Cookie了,从而在后续请求中将这个带SessionID的Cookie发送回服务器端,使会话延续。

 

ASP.NET Response.Redirect 丢失 Session的问题

标签:style   blog   io   color   使用   java   sp   strong   div   

原文地址:http://www.cnblogs.com/OpenCoder/p/4074884.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!