Chinaunix首页 | 论坛 | 博客
  • 博客访问: 473697
  • 博文数量: 112
  • 博客积分: 5696
  • 博客等级: 大校
  • 技术积分: 1720
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-17 09:58
文章分类

全部博文(112)

文章存档

2011年(22)

2010年(28)

2009年(21)

2008年(41)

分类: WINDOWS

2010-08-19 01:33:20

Session又称为会话状态,是Web系统中最常用的状态,用于维护和当前浏览器实例相关的一些信息。举个例子来说,我们可以把已登录用户的用户名放在Session中,这样就能通过判断Session中的某个Key来判断用户是否登录,如果登录的话用户名又是多少。

Session对于每一个客户端(或者说浏览器实例)是“人手一份”,用户首次与Web服务器建立连接的时候,服务器会给用户分发一个SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端。那么,ASP.NET 2.0提供了哪些存储SessionID的模式呢:

      Cookie(默认)。如果客户端禁止了Cookie的使用,Session也将失效。

      URL。Cookie是否开启不影响Session使用,缺点是不能再使用绝对链接了。

ASP.NET 2.0对于Session内容的存储也提供了多种模式。

      InProc(默认)。Session存储在IIS进程中(Web服务器内存)。

      StateServer。Session存储在独立的Windows服务进程中(可以不是Web服务器)。

      SqlServer。Session存储在SqlServer数据库的表中(SqlServer服务器)。


在使用Session的过程中你可能还会遇到很多奇怪的问题,结束本节之前笔者列出了几条常见的FAQ,供大家参考:

      为什么每次请求的SessionID都不相同?

  可能是没有在Session里面保存任何信息引起的,即程序中任何地方都没有使用Session。只有在Session中保存了内容后,Session才会和浏览器进行关联,此时的SessionID将不会再变化。

      为什么当我设置cookieless为true后,在重定向的时候会丢失Session?

  当使用cookieless时,你必须使用相对路径替换程序中的绝对路径,如果使用绝对路径,ASP.NET将无法在URL中保存SessionID。

      有办法知道应用程序的Session在运行时占用了多少内存吗?

  没有办法,你可以通过观察IIS进程(InProc模式)或者aspnet_state进程(StateServer模式)大致估计。

      有没有可能知道整个网站使用Session的用户列表?

  对于InProc模式和StateServer模式很难,对于SqlServer模式你可以查询存储Session的表进行尝试。

      当页面中设了frameset,发现在每个frame中显示页面的SessionID在第一次请求时都不相同,为什么?

  原因是你的frameset是放在一个HTML页面上而不是ASPX页面。在一般情况下,如果frameset是aspx页面,当你请求页面时,它首先将请求发送到Web服务器,此时已经获得了SessionID,接着浏览器会分别请求Frame中的其他页面,这样所有页面的SessionID就是一样的,就是FrameSet页面的SessionID。然而如果你使用HTML页面做FrameSet页面,第一个请求将是HTML页面,当该页面从服务器上返回时并没有任何Session产生,接着浏览器会请求Frame里面的页面,这样,这些页面都会产生自己的SessionID,所以在这种情况下就可能出现这种问题。当你重新刷新页面时,SessionID就会一样,并且是最后一个请求页面的SessionID。

阅读(15719) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

chinaunix网友2010-08-20 10:46:50

很好啊, 收藏了 推荐一个博客,提供很多免费电子书下载: http://free-ebooks.appspot.com