原本去年在做项目时,写好的一记篇博客分享给大家。

Asp.net页面跳转Session丢失问题

 

编写人:CC阿爸

2014-4-2

l  近来在做泛微OA与公司自行开发的系统集成登录的问题。在使用Response.redirect跳转时,Session变量会丢失的问题。

经过在网上搜索部分解决方案,大致可以归类为以下几种情况

  1. 是因为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"/>

  1. 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");

  1. 当页面中是否了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丢失问题的更多相关文章

  1. 总结asp.net页面跳转

    ASP.NET页面跳转相关知识 一.<a>标签   1. <a href=”test.aspx”></a>   2. 这是最常见的一种转向方法; eg:  < ...

  2. ASP.NET页面跳转的三大方法详解

    ASP.NET页面跳转有什么方法呢?,现在给大家介绍三种方法,他们的区别是什么呢?让我们开始吧: ASP.NET页面跳转1.response.redirect 这个跳转页面的方法跳转的速度不快,因为它 ...

  3. ASP.NET状态服务及session丢失问题解决方案总结

    原文:ASP.NET状态服务及session丢失问题解决方案总结[转载] asp.net Session的实现: asp.net的Session是基于HttpModule技术做的,HttpModule ...

  4. ASP.NET页面跳转的三种方法比较

    在ASP.NET下,经常需要在页面之间跳转,下面我们来分别介绍一下关于.NET中Response.Redirect(),Sever.Execute(),Server.Transfer() 三种页面跳转 ...

  5. ASP.NET页面跳转

    总结一下跳转方式: <a>标签 <a href=”home.aspx”></a> HyperLink控件 Asp.net 服务器端控件 属性NavigateUrl指 ...

  6. ASP.NET 状态服务 及 session丢失问题解决方案总结

    ASP.NET2.0系统时,在程序中做删除或创建文件操作时,出现session丢失问题.采用了如下方法:1.asp.net Session的实现:asp.net的Session是基于HttpModul ...

  7. asp.net页面跳转sessionid会变

    今天发现在一个Asp.net站点中, 同一次登录, 不停刷新页面或者页面跳转, 此时后台Session的SessionID总是变化的. 创建一个页面,添加一个button,后台代码非常简单,如下   ...

  8. [转]ASP.NET 状态服务 及 session丢失问题解决方案总结

    转自[http://blog.csdn.net/high_mount/archive/2007/05/09/1601854.aspx] 最近在开发一ASP.NET2.0系统时,在程序中做删除或创建文件 ...

  9. asp.net 页面跳转的方法

    目前知道有4种: 1超链接 2.response.redirect("urlString") 3.server.transfer("urlString") 4. ...

随机推荐

  1. C++学习45 流成员函数put输出单个字符 cin输入流详解 get()函数读入一个字符

    在程序中一般用cout和插入运算符“<<”实现输出,cout流在内存中有相应的缓冲区.有时用户还有特殊的输出要求,例如只输出一个字符.ostream类除了提供上面介绍过的用于格式控制的成员 ...

  2. java小程序实例 闰年

    判断闰年. package com.test; import java.util.Scanner; import org.junit.Test; public class TestRunNian { ...

  3. String相关操作

    1.求字符串中连续出现最多的字串 pair<string, int> substring(const string& str) { ; string substr; vector& ...

  4. 共享有线实现手机上网,然后使用charles来抓包

    问题描述:共享有线实现手机上网(http://support1.lenovo.com.cn/lenovo/wsi/htmls/detail_1323385217890211.html)  [建议] 还 ...

  5. nfs挂在内核出错 T T *** ERROR: Cannot umount

    今天在U-boot挂载nfs内核是出现如下错误,网上查了解决方案. SOCFPGA_CYCLONE5 # nfs 20000 192.168.0.75:/work/nfs_root/uImageWai ...

  6. chrome 修改标签页

    插件名称:New Tab Redirect 标签格式:"file:///home/user/index.html"

  7. 一张图看Goodle Clean设计架构

    之前用一张图分析了Google给出的MVP架构,但是在Google给出的所有案例里面除了基本的MVP架构还有其它几种架构,今天就来分析其中的Clean架构.同样的,网上介绍Clean架构的文章很多,我 ...

  8. 如何用CSS进行开发

    翻译自:How to Develop with CSS 很多web开发人员都知道CSS,但是他们很可能认为使用CSS的应用代码就是这样的: <p> <span style=" ...

  9. python常见环境安装

    pyinotify安装git clone https://github.com/seb-m/pyinotify.gitcd pyinotify/python setup.py install 安装py ...

  10. 学习资料 50个常用的sql语句

    Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题 ...