游客
欢迎光临
  发起投票 | 发起主题  
2008-05-16
男
清醒、务实、果敢、大度
帖子数: 96
发帖数前10位(2)

  回复 | 编辑 |
ASP(Active Server Pages)技术的Session对象用于存储用户在对话期间的私有信息。当前用户的Session对象中定义的变量和对象能在页面之间共享,但是不能为应用中其他用户所访问,因此在用ASP开发网络应用程序时,可以利用Session对象保存和跟踪用户的状态信息。
Session对象有一个十分重要的属性:Timeout,它用于设置在会话资源被释放前,会话对象所能保持非活动状态的时间(默认值为20分钟)。当Timeout属性设置的时间值耗尽后,会话资源将被释放。通过Timeout属性破坏Session对象,避免了Session对象在服务器中无限制地产生,保护了服务器资源。
同理,ASP.NET中的Session继承了以上功能。那么这里简单谈谈Session的Timeout的一些设置(即Session的有效期)。
最简单的设置方式延长Session有效期。
 
1、设置网站的应用程序配置
 
2、设置ASP.NET中的配置,修改webconfig文件。(也可以通过代码添加)
 
3、Session储存的位置绝对不在客户端。Session储存方式有三种,可在web.config中设置。
InProc模式,这种模式下Session保存在ASP.NET的进程内,是一个内部容器,在同一个应用程序目录是共享的,但是如果这个进程被Web服务器回收,则Session就会丢失,所以这种模式很不稳定。
StateServer模式,这种模式下Session被保存在一个Windows Service的进程内,Windows Service的进程比ASP.NET的进程稳定得多,只要开启这个服务的电脑不当机,一般来说都是比较稳定的。
SQL Server模式,这种模式就更进一步,将Session保存到了数据库中,通过牺牲效率换取稳定。
也可通过ASP.NET配置设置

4、存储的类型和大小?
一般来说,InProc模式下,Session对储存的对象没有任何限制。而在StateServer和SQL Server模式中,由于Session需要跨进程保持,所以要求所储存对象的类型必须是可序列化的。虽然Session对所储存的数据大小没有什么限制,但不建议在Session中储存太多的东西。

5、生命周期是怎么样的?
正常情况下Session在新的客户端第一次访问页面时创建,在超过超时时间没有任何页面访问后销毁。

6、常见的访问方法
一般来说Session这种公用容器需要为期专门撰写访问类,而不应直接访问。
一个简单的访问类可能看起来是这样的:

public MyContext
{
  public static MyContext Current
  {
    get { return HttpContext.Current.Session["hnop"] as MyContext; }
    set { HttpContext.Current.Session["hnop"] = value; }
  }
}


7、比较
Session的特点很突出,就是他与客户端有关,一般来说只要客户端不关闭浏览器,那么他访问的所有的页面所获得的都是同一个Session容器。我们可以往Session中放入用户相关的信息,如登陆信息。但要注意的是,Session是一个公共容器,所以他里面的信息可以被任何运行在服务器上的代码所修改。


BRUCE
湖南开源科技有限公司
微软湖南企业技术支持中心
086 0731-2234440 4441633
bruce@overmcse.com
http://www.overmcse.com
长沙市五一大道800号中隆国际大厦907
激发个人潜能,实现企业潜力

2008-10-06 14:42 第 1 楼 218.77.59.* 回复 | 编辑 |

  1. 主页
  2. »
  3. 论坛首页
  4. »
  5. 应用开发技术
  6. »
  7. .NET
  8. »
  9. Session浅谈
 



Powered By Openlab v2.0 (Debug Build: 0.28670) © 2010. 页面执行: 0.016秒. 内存使用: 135.3MB. 1 次数据查询.