Asp.net页面跳转Session丢失问题
原本去年在做项目时,写好的一记篇博客分享给大家。
Asp.net页面跳转Session丢失问题
编写人:CC阿爸
2014-4-2
l 近来在做泛微OA与公司自行开发的系统集成登录的问题。在使用Response.redirect跳转时,Session变量会丢失的问题。
经过在网上搜索部分解决方案,大致可以归类为以下几种情况
- 是因为iis回收的原因。有人建议更改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"/>
- IE6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P) specification)协议默认阻止第三方无隐私安全声明的cookie,Firefox目前还不支持P3P安全特性,firefox中自然也不存 在此问题了。Mircosoft对此的具体描述可以参见 Privacy in Internet Explorer 6
解决办法是在服务器响应时输出P3P的主机头声明:
if (context.Request.Browser.Browser.ToUpper().Contains("IE"))
context.Response.Headers.Add("P3P", "CP=CAO PSA OUR");
- 当页面中是否了frameset,发现在每个frame中显示页面的SessionID在第一次请求时都不相同,原因是你的frameset是放在一个htm页面上而不是ASPX页面。
在一般情况下,如果frameset是aspx页面,当你请求页面时,它首先将请求发送到Web服务器,此时已经获得了SessionID,接着浏览器会分别请求Frame中的其他页面,这样所有页面的SessionID就是一样的,就是FrameSet页面的SessionID。
然而如果你使用Html页面做FrameSet页面,第一个请求将是HTML页面,当该页面从服务器上返回是并没有任何Session产生,接着浏览器会请求Frame里面的页面,这样这些页面都会产生自己的SessionID,所以在这种情况下就会出现这种问题。当你重新刷新页面时,SessionID就会一样,并且是最后一个请求页面的SessionID。
综上发现,我使用的是第三种,因此常会出现session丢失的问题,使用第一二种解决方法未能解决。
于是仔细观察了httpwatch中截获的请求,发现Cookies选项中在跳转之前是空的,这个里面应该存储了当前session的id才对,于是就想如果我在Redirect之前就将session的id放到Cookies中是不是就能解决这个问题了呢。果然不出所料,修改完后问题解决了。
Response.Cookies.Add(new
HttpCookie("ASP.NET_SessionId", Session.SessionID));
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", Session.SessionID));
Response.Redirect("index.htm",false);
后来想到,这个问题还有一个比较简单的解决办法就是:
Server.Transfer("index.htm ")
Asp.net页面跳转Session丢失问题的更多相关文章
- 总结asp.net页面跳转
ASP.NET页面跳转相关知识 一.<a>标签 1. <a href=”test.aspx”></a> 2. 这是最常见的一种转向方法; eg: < ...
- ASP.NET页面跳转的三大方法详解
ASP.NET页面跳转有什么方法呢?,现在给大家介绍三种方法,他们的区别是什么呢?让我们开始吧: ASP.NET页面跳转1.response.redirect 这个跳转页面的方法跳转的速度不快,因为它 ...
- ASP.NET状态服务及session丢失问题解决方案总结
原文:ASP.NET状态服务及session丢失问题解决方案总结[转载] asp.net Session的实现: asp.net的Session是基于HttpModule技术做的,HttpModule ...
- ASP.NET页面跳转的三种方法比较
在ASP.NET下,经常需要在页面之间跳转,下面我们来分别介绍一下关于.NET中Response.Redirect(),Sever.Execute(),Server.Transfer() 三种页面跳转 ...
- ASP.NET页面跳转
总结一下跳转方式: <a>标签 <a href=”home.aspx”></a> HyperLink控件 Asp.net 服务器端控件 属性NavigateUrl指 ...
- ASP.NET 状态服务 及 session丢失问题解决方案总结
ASP.NET2.0系统时,在程序中做删除或创建文件操作时,出现session丢失问题.采用了如下方法:1.asp.net Session的实现:asp.net的Session是基于HttpModul ...
- asp.net页面跳转sessionid会变
今天发现在一个Asp.net站点中, 同一次登录, 不停刷新页面或者页面跳转, 此时后台Session的SessionID总是变化的. 创建一个页面,添加一个button,后台代码非常简单,如下 ...
- [转]ASP.NET 状态服务 及 session丢失问题解决方案总结
转自[http://blog.csdn.net/high_mount/archive/2007/05/09/1601854.aspx] 最近在开发一ASP.NET2.0系统时,在程序中做删除或创建文件 ...
- asp.net 页面跳转的方法
目前知道有4种: 1超链接 2.response.redirect("urlString") 3.server.transfer("urlString") 4. ...
随机推荐
- Oracle中的自增-序列-SEQUENCE
Oracle 12c 之前的版本都没有自增列,如果需要使用自增列,则需要借助SEQUENCE. DROP TABLE CUSTOMERORDER PURGE; CREATE TABLE CUSTOME ...
- delphi的tserversocket控件如何接收16进制数
http://bbs.csdn.net/topics/390473005 对方客户端发送数据如:68 00 00··········:接收完成后,数据长度没错(13),但是显示接收结果时,只显示一个字 ...
- ppm与mg/m3转换
http://wenku.baidu.com/link?url=PY0Nb09VWmBDZgLvMhaHYGJyaC6YcdYAI5XTPRkxMpDHPrs3dNxskYkKmp2F0E6Sl2H5 ...
- 分布式消息队列的使用kakfa
作用: 1.系统解耦 2.通过消息可以减少系统的处理压力,做一个缓冲 3.原理基于生存者消费者的模式 4.两种场景:队列(端对端 一对一).主题(一对多,广播模式) 5.消息:header.body构 ...
- Grunt 之 watch 和 livereload
现在 watch 中已经集成了 livereload ,所以把它们放在一起说明. watch 可以监控特定的文件,在添加文件.修改文件.或者删除文件的时候自动执行自定义的任务,比如 livereloa ...
- [原创] IIS7下顶级域名301跳转到WWW域名
百度搜索了众多方法,居然没有一个全面的IIS7下301域名跳转能用的教程,最终自己研究出了个可以用的供大家参考.1.绑定域名01ruodian.cn www.01ruodian.cn到空间: 2.在I ...
- mysql命令整理0919 不定期更新中
1)新建数据库 create database +database_name: 查询数据库 show databases; 切换数据库 use database_na ...
- yii中第三方库
yii中存在一些路径别名:ext:表示包含了所有第三方扩展的目录 参考:http://www.yiiframework.com/doc/guide/1.1/zh_cn/basics.namespac ...
- 华为OJ平台——24点游戏
题目描述: 给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利 输入: 4个1-10的数字.[数字允许重复,测试用例保证无异常数字]输出: true or false 思路:
- Windows7:Visual Studio 2008试用版的评估期已经结束解决方法
Windows7:Visual Studio 2008试用版的评估期已经结束解决方法 以前在Windows2003碰到这个问题时,都是到"控制面板→添加或删除程序"选择 ...