知识大全 ASP.NET Session的七点认识

Posted 变量

篇首语:劳动教养了身体,学习教养了心灵。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET Session的七点认识相关的知识,希望对你有一定的参考价值。

ASP.NET Session的七点认识  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  ASP NET Session的使用当中我们会遇到很多的问题 那么这里我们来谈下经常出现的一些常用ASP NET Session的理解

  ASP NET Session的七点认识之一

  对于值类型的变量 Session中保存的是值类型的拷贝

  Session["__test "] = ;  int i = (int)Session["__test "]+ ;  int j = (int)Session["__test "]; 结果i= j=

  ASP NET Session的七点认识之二

  对于引用类新的变量 Session中保存的是引用

  CDACommon cda = new CDACommon();  Session["__test"] = cda GetDataSet("select top * from tb_customer");  DataSet ds = (DataSet)Session["__test"];  DataSet ds = (DataSet)Session["__test"];  ds Tables[ ] Rows[ ][ ]=" ";  结果ds Tables[ ] Rows[ ][ ]==" " ds Tables[ ] Rows[ ][ ]==" ";

  ASP NET Session的七点认识之三

  Session周期

  新的浏览器窗口启动后 开始一个新的Session 触发Global的Session_Start的调用 从第一个浏览器窗口打开的浏览器窗口不 启动新的Session Session过期后 执行页面的提交也会触发Session_Start 等于是新的一个Session

  ASP NET Session的七点认识之四

  调用Session

  对于Web Service 每个方法的调用都会启动一个Session 可以用下面的方法来使多个调用在同一个Session里

  CWSSyscfg cwsCfg = new CWSSyscfg();  cwsCfg CookieContainer = new System Net CookieContainer(); CWSSyscfg是一个Web Service类 Web Service的给代理类设置CookieContainer属性 只要多个代理的CookieContainer属性是相同的值 则对这些Web Service的调用在同一个Session 可以用单例模式来实现

  ASP NET Session的七点认识之五 Session数据有效期 只要页面有提交活动 则Session的所有项都会保持 页面在 分钟(默认配置)内没有任何提交活动时Session会失效 Session内存储的多个数据项是整体失效的

  ASP NET Session的七点认识之六 Session的保存

  在session中如果保存的是非序列化的类比如DataView 在用SQLServer保存Session的模式下 无法使用 查看一个类是否是序列化的方法是 需看是否用[Serializable]来标记了该类

  ASP NET Session的七点认识之七

  关于Sesson的清除

  如果我在Session中保存一个比较大的DataSet 这样aspnet_wp exe占有的内存会很大 假如我退出了使用这个DataSet 的页面 我想释放该Session 我用Session Clear() 或者DataSet Clear()都 不能使内存的占用降下来 即使Session过了期限 内存也没有降下来 比较困惑 谁能给我详细解释一下

  要说到session这个东西 很多人可能都不屑一顾 这个东东嘛 n年前就开始做了 有啥好讲的啊 可是 在很多地方我们还是会发现一些问题 比 如有的人说 我的session_start激发了 怎么session_end没有啊 我在session_end做了些善后工作 这下没法完成了 怎 么办啊?

  最近看了些文章 结合自己的一些经验 想和大家一起讨论一下其中的说法

  其实 很多这类的问题都是由一个东西引起的 它就是session ID 首先 是不是我一个IE client起来 访问一个页面 只要我不关浏览器 session ID就是一样的呢?很多人会想 应该是一样的吧 我浏览器都没关 web server总归会认为我是同一个client 不会把session ID变来变去的 要验证这个 让我们现在做一个简单的试验 用vs net创建一个简单的asp net web app 在web form 上加个button 然后在页面的page prefix上enable trace 接下来浏览这个页面 不停的click button来提交request 感谢asp net的这个trace功能 我们可以看到session ID其实是在不停的变化的 也就是说 这时候在服务器端 根本就不关心这个client的存在 每次都觉得它是来自一个新的client

  那这到底是怎么回事呢?OK 让我们在page_load里面加上一句 session["variable "]="testvalue";然后 再做一下测试 Bingo 现在session ID就保持一致了 我想 很多人也许以前就没有注意到这点 这里我们可以得出一个结论:要建立一个持续的session 咱们需要至少使用一下 session变量 用行话来说 就是要至少往session dictionary中写入一次

  不过 值得注意的是 这只是个必要条件 还不是充分条件

  在提到下一个必要条件前 我们先来弄清一件事 如果我们在程序中间有global asax 里面有session_onstart session_onend 上面的实验是不会成功的 原因是一旦定义了session_onstart处理函数后 session的state就总是会 被保存了 即使里面是空的 这样的话 session ID就不会改变了 因为session这东西还是消耗资源的 所以在asp net web app中如果没有必要 你就不要把session_onstart session_end写在global asax中

  上面的实验中 我们也可以看到 如果session ID在变化 我们就跟踪不到session_onend 一旦稳定下来 session_onend就出现了

  现在 我们再来谈谈另一个条件 还是先从实验做起 我们在刚才例子的基础上(包括session_onstart session_onend) 在page_load的session那行的下面加上一句 session abandon() 再来运行一把 咦 这是 你会发现一点奇怪的地方 session_onend不执行了 尽管session_onstart执行过了一遍 (这里我们需要写一些log语句来观察 到)而且 如果我们把session abandon()写在button onclick事件里面 session_onend就立马执行了 奇怪吧 这里有什么区别呢?

  这样 第二个必要条件就引发了 要让session_onend成功执行 至少要有一个request已经被完整地执行过 上面的第一种情况 在page_load中就中止的话 第一个request都没有执行完毕 session_onend就没法激发了

  综合这两个必要条件 我们终于可以得出要让session_onend执行的充分条件了

  ◆至少有一个request成功完整地执行

  ◆至少存储一些data在session state中 可以通过session变量或者加上session_onstart来实现

  最后声明一点 session_onend只在InProc模式中支持 也就是说 只在session data在asp net worker process中时支持

cha138/Article/program/net/201311/14107

相关参考

知识大全 ASP.NET会话(Session)模式

ASP.NET会话(Session)模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Asp.net的Session过期

Asp.net的Session过期  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  目录删除及重命

知识大全 ASP与ASP.NET转换Session数据桥的应用

ASP与ASP.NET转换Session数据桥的应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 ASP.NET中的session存储模式运用

ASP.NET中的session存储模式运用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在中

知识大全 Asp.Net处理Session失效解决方案

Asp.Net处理Session失效解决方案  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  检查

知识大全 ASP.NET Session 详解

ASP.NETSession详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  阅读本文章前需要

知识大全 Asp.Net中NHiernate的Session的管理

Asp.Net中NHiernate的Session的管理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 Asp.net中判断一个session是否合法的方法

Asp.net中判断一个session是否合法的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 ASP.Net Session超时的问题

ASP.NetSession超时的问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &

知识大全 ASP.Net中Session失效的一种编程思路[1]

ASP.Net中Session失效的一种编程思路[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧