知识大全 session定义使用和丢失问题小结
Posted 文件
篇首语:一个人使劲踮起脚尖靠近太阳的时候,全世界都挡不住她的阳光。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 session定义使用和丢失问题小结相关的知识,希望对你有一定的参考价值。
以前用Session的时候 总是拿来就用 也没想过先定义再使用 今天就换一种方式
System Web SessionState HttpSessionState session = System Web HttpContext Current Session;//创建Session
session Add( admin Test Session );//Session赋值
session Timeout = ;//设置会话超时期限 单位为分钟
Response Write(System Web HttpContext Current Session[ admin ] ToString());//测试成功
运行立刻可以可以知道结果了 否则 有时候session的值为null也不知道 还老是问为什么session不能传递到下一页面呢?为什么老是丢失呢?
然后在下一页面
protected void Page_Load(object sender EventArgs e)
if (Session[ admin ] == null)
Response Redirect( login aspx );
就完成了登陆的session传递了和判断了
当然 用完了 例如注销登陆 则需要
Session[ admin ] = ;//Session[ admin ] = null 可理解 Session[ admin ]根本不存在 但= 只不过说明他的值是 =
Session Abandon ();
结合我二次开发的blog这里有一点建议 如果调试不成功登陆可以考虑在登陆页面中的
if ( Session[ admin ]== loginok )
Response Redirect( index aspx );
代码不要 因为有可能session重复设置 导致混乱不清而出错
我们在用C#开发程序的时候经常会遇到Session很不稳定 老是数据丢失 下面就是Session数据丢失的解决办法
在WEB CONFIG文件中修改SESSION状态保存模式 如
<sessionState mode= StateServer stateConnectionString= tcpip= : sqlConnectionString= data source= ;Trusted_Connection=yes cookieless= true timeout= />
说明:Web Config文件中关于Session的设定如下 sessionState mode= inproc 所以要更改
启动系统服务 ASP NET状态服务 系统默认是手动启动的
如果SESSION中保存的数据类型是自定义的 如结构 请在自定义数据类型处序列化会话状态 即在类或结构申明前加[Serializable]
完成以上 部 状态即可保存 但是在访问页面是浏览器显示的路径中增加了一段字符 如 (S(lto j eg cztmqtxevm tb ))
SessionState 的Timeout) 其主要原因有三种
一 有些杀病毒软件会去扫描您的Web Config文件 那时Session肯定掉 这是微软的说法
二:程序内部里有让Session掉失的代码 及服务器内存不足产生的
三 程序有框架页面和跨域情况
第一种解决办法是:使杀病毒软件屏蔽扫描Web Config文件(程序运行时自己也不要去编辑它)
第二种是检查代码有无Session Abandon()之类的
第三种是在Window服务中将ASP NET State Service 启动
又找到一篇文章 写是这样的
Session的实现
的Session是基于HttpModule技术做的 HttpModule可以在请求被处理之前 对请求进行状态控制 由于Session本身就是用来做状态维护的 因此用HttpModule做Session是再合适不过了
原因
bin目录中的文件被改写 有一种机制 为了保证dll重新编译之后 系统正常运行 它会重新启动一次网站进程 这时就会导致Session丢失 所以如果有access数据库位于bin目录 或者有其他文件被系统改写 就会导致Session丢失
原因
文件夹选项中 如果没有打开 在单独的进程中打开文件夹窗口 一旦新建一个窗口 系统可能认为是新的Session会话 而无法访问原来的Session 所以需要打开该选项 否则会导致Session丢失
原因
似乎大部分的Session丢失是客户端引起的 所以要从客户端下手 看看cookie有没有打开
原因
Session的时间设置是不是有问题 会不会因为超时造成丢失
原因
IE中的cookie数量限制(每个域 个cookie)可能导致session丢失
原因
使用web garden模式 且使用了InProc mode作为保存session的方式
解决丢失的经验
判断是不是原因 造成的 可以在每次刷新页面的时候 跟踪bin中某个文件的修改时间
做Session读写日志 每次读写Session都要记录下来 并且要记录SessionID Session值 所在页面 当前函数 函数中的第几次Session操作 这样找丢失的原因会方便很多
如果允许的话 建议使用state server或sql server保存session 这样不容易丢失
在global asa中加入代码记录Session的创建时间和结束时间 超时造成的Session丢失是可以在SessionEnd中记录下来的
如果有些代码中使用客户端脚本 如javascript维护Session状态 就要尝试调试脚本 是不是因为脚本错误引起Session丢失
哪些情况下该进程会重启动呢?微软的一篇文章告诉了我们
配置文件中processModel标签的memoryLimit属性
Global asax或者nfig文件被更改
Bin文件夹中的Web程序(DLL)被修改
杀毒软件扫描了一nfig文件
更多的信息请参考PRB: Session variables are lost intermittently in ASP NET applications
解决办法
前面说到的sessionState标签中mode属性可以有三个取值 除了InProc之外 还可以为StateServer SQLServer 这两种存Session的方法都是进程外的 所以当aspnet_wp exe重起的时候 不会影响到Session
现在请将mode设定为StateServer StateServer是本机的一个服务 可以在系统服务里看到服务名为ASP NET State Service的服务 默认情况是不启动的 当我们设定mode为StateServer之后 请手工将该服务启动
这样 我们就能利用本机的StateService来存储Session了 除非电脑重启或者StateService崩掉 否则Session是不会丢的(因Session超时被丢弃是正常的)
除此之外 我们还可以将Session通过其他电脑的StateService来保存 具体的修改是这样的 同样还在sessionState标签中 有个stateConnectionString= tcpip= : 属性 其中有个ip地址 默认为本机( ) 你可以将其改成你所知的运行了StateService服务的电脑IP 这样就可以实现位于不同电脑上的程序互通Session了
如果你有更高的要求 需要在服务期重启时Session也不丢失 可以考虑将mode设定成SQLServer 同样需要修改sqlConnectionString属性 关于使用SQLServer保存Session的操作 请访问这里
在使用StateServer或者SQLServer存储Session时 所有需要保存到Session的对象除了基本数据类型(默认的数据类型 如int string等)外 都必须序列化 只需将[Serializable]标签放到要序列化的类前就可以了
如
[Serializable]
public class MyClass
cha138/Article/program/net/201311/12792
相关参考
知识大全 ie与session丢失(新窗口cookie丢失)实测及解决方案
正如标题所言测试结果为如果cookie设置是延后定时失效而非进程级的那在open后也能看到所以针对此情况防止用户在使用ie内核出现登录状态丢失可以配合cookie来使用 今天在一个群中有
ASP.NetSession超时的问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
知识大全 Asp.net中处理一个站点不同Web应用共享Session的问题
Asp.net中处理一个站点不同Web应用共享Session的问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一
PHPsession 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文将这些问题做一个简单的汇
知识大全 急!急!急!关于户口迁移证丢失,如何补办户口的问题!
急!急!急!急!关于户口迁移证丢失,如何补办户口的问题!迁移证丢失,你的户口还在邯郸.到邯郸学校的公安处,拿着身份证补办迁移证就可以了.不是很麻烦,一天就能搞定.急!!!!!!!!!!关于大连东软信息
先说session 对SESSION的争论好象一直没有停止过不过幺麽能理解SESSION的人应该占以上但还是讲讲别嫌老~ 有一些人赞
知识大全 关于innerHTML后丢失动态绑定的EVENT问题
关于innerHTML后丢失动态绑定的EVENT问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
系统性红斑狼疮的致病因素很多,而且发病机理相对复杂。至今,医学界对其定义为,是由机体免疫系统失常而引起的,这是一个总结性的概括。那么,哪些因素能诱发系统性红斑狼疮呢?我们就这个问题小结一下。阳光的照射
知识大全 基于php使用memcache存储session的详解
web服务器的phpsession都给memcached这样你不管分发器把ip连接分给哪个web服务器都不会有问题了配置方法很简单就在php的配置文件内增加一条语句就可以了不过前提你需要装好mem
知识大全 oracle中process和session的关系
在SharedServer中的Process和Oracle中的Session不是一一对应的SharedServer中的Process一个对应着Oracle中的一个或者一个以上的Session 我