ASP.NET Response.Redirect 丢失 Session的问题(作废,仅供参考)
以前在做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测试发现本文所述的问题已经不存在了,Cookie在Response.Redirect后已经可以成功发送到客户端浏览器,并被Redirect之后的服务器页面读取到。看到一篇老外写的文章也提到ASP.NET的一个BUG修复补丁修复了Redirect会丢失Cookie的问题,所以本文所述内容在最新版本的ASP.NET中已不存在,如果在老版本的ASP.NET中遇到本文所述的问题,可以参考上面内容。
ASP.NET Response.Redirect 丢失 Session的问题(作废,仅供参考)的更多相关文章
- Asp.net Response.Redirect with post data
string url = String.Format("{0}://{1}/{2}", Request.Url.Scheme, Request.Url.Authority, &qu ...
- response.redirect 与location.href 的区别
最近做项目时发现,先弹出提示框,再跳转页面 这样写:Jscript.Alert("你好,Hello!"); Response.Redirect("/index.aspx& ...
- aspx在页面跳转(Response.Redirect)时丢失session问题及解决办法
[问题描述] 假设a.aspx.cs页面保存有Session["empid"]="3",当a.aspx.cs通过Response.Redirect(" ...
- Response.Redirect("x.aspx);跳转后session为null的解决方法
通常我们做登陆的时候都是登录成功后为管理员保存一些信息,一般都会写类似下面的代码 if(登录成功) { Session["xx"] = "user"; Resp ...
- Asp.net页面跳转Session丢失问题
原本去年在做项目时,写好的一记篇博客分享给大家. Asp.net页面跳转Session丢失问题 编写人:CC阿爸 2014-4-2 l 近来在做泛微OA与公司自行开发的系统集成登录的问题.在使用 ...
- Session variables lost after the call of Response.Redirect method
From: https://forums.asp.net/t/2096848.aspx?Session+variables+lost+after+the+call+of+Response+Redir ...
- ASP.NET 状态服务 及 session丢失问题解决方案总结
ASP.NET2.0系统时,在程序中做删除或创建文件操作时,出现session丢失问题.采用了如下方法:1.asp.net Session的实现:asp.net的Session是基于HttpModul ...
- 如何解决Response.Redirect方法传递汉字丢失或乱码问题?
为了确保传递的汉字被正确地接收,可以在传值之前使用Server对象的UrlEncode方法对所传递的汉字进行URL编码.代码如下: String name = Server.UrlEncode(&qu ...
- [转]ASP.NET 状态服务 及 session丢失问题解决方案总结
转自[http://blog.csdn.net/high_mount/archive/2007/05/09/1601854.aspx] 最近在开发一ASP.NET2.0系统时,在程序中做删除或创建文件 ...
随机推荐
- SQLServer 学习笔记之超详细基础SQL语句 Part 8
Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 7------------------- --触发器str_trigge ...
- Android--根据子控件的大小自动换行的ViewGroup
1.自定义ViewGroup /** * Created by Administrator on 2016/2/26. * * --------自动换行的ViewGroup----------- */ ...
- Expo大作战(十一)--expo中的预加载和缓存资产(Preloading & Caching Assets),expo中的图标 (Icon)
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...
- 解决 jQuery validation插件 valid()方法总是返回true的问题
在表单元素验证方法中加入了 remote 方法,调试一直返回true,后来才知道因为是异步验证,所以才会出现此问题,解决方法就是在 remote 方法中,禁用 异步和缓存,具体代码如下 : ..... ...
- HTIML5 真的打败了Flash?新测试结果出人意料
[编者按]本文最早发布于 2010 年,通过 Flash 与 HTML5 在 Mac 及 Windows 平台不同浏览器中的测试表现,比较两者的性能并分析背后的原因.虽然是一篇老文,但其客观冷静的分析 ...
- 使用 Azure PowerShell 模块创建和管理 Windows VM
Azure 虚拟机提供完全可配置的灵活计算环境. 本教程介绍 Azure 虚拟机的基本部署项目,例如选择 VM 大小.选择 VM 映像和部署 VM. 你将学习如何执行以下操作: 创建并连接到 VM 选 ...
- Oracle EBS OPM complete batch
--complete_batch --created by jenrry SET serveroutput on DECLARE x_return_status VARCHAR2 (1); l_exc ...
- 为何使用Microsoft SQL Server Management Studio连接Integration Services服务失败
检查是否满足以下各项: 1. 首先你要确保当前你使用的Windows账号是有管理员权限的 2. 其次请在打开Microsoft SQL Server Management Studio时,通过右键Ru ...
- SQL2005中的事务与锁定(九)-(1)- 转载
------------------------------------------------------------------------ -- Author : HappyFlyStone - ...
- grep 匹配制表符 和 换行符
使用: [root@dhcp-- ~]# grep $'\n' log.txt [root@dhcp-- ~]# grep $'\t' log.txt 这两个命令 [root@dhcp-- ~]# l ...