选择显示字体大小

在asp.net中实现会话状态基础(4)

     cookieless 会话
  
    每个活动 asp.net 会话都是使用仅由 url 允许的字符组成的 120 位字符串标识的。会话 id 是使用随机数生成器 (rng) 加密提供程序生成的。该服务提供程序返回一个包含 15 个随机生成数的序列(15 字节 x 8 位 = 120 位)。随机数数组然后被映射到有效的 url 字符并以字符串形式返回。
  
    会话 id 字符串被发送到浏览器,然后通过以下两种方式之一返回服务器应用程序:使用 cookie(就像在传统 asp 中一样)或经过修改的 url。默认情况下,会话状态模块将在客户端创建 http cookie,但是可以使用嵌入会话 id 字符串的修改后的 url(特别是对于不支持 cookie 的浏览器)。采用哪种方法取决于应用程序的 web.config 文件中所存储的配置设置。要配置会话设置,可以使用 <sessionstate>; 区段和 cookieless 特性。
  
  <sessionstate cookieless="truefalse" />;
  
    默认情况下,cookieless 特性为 false,表示使用了 cookie。实际上,cookie 只是 web 页放在客户端硬盘上的一个文本文件。在 asp.net 中,cookie 由 httpcookie 类的一个实例来表示。通常,cookie 包含名称、值集合和过期时间。cookieless 特性被设置为 false 时,会话状态模块实际上将创建一个名为 asp.net_sessionid 的 cookie 并将会话 id 存储在其中。下面的伪代码显示了创建 cookie 的过程:
  
  httpcookie sessioncookie;
  sessioncookie = new httpcookie("asp.net_sessionid", sessionid);
  sessioncookie.path = "/";
  
    会话 cookie 的过期时间很短,在每个请求成功后更新过期时间。cookie 的 expires 属性表示 cookie 在客户端的过期时间。如果未显式设置会话 cookie,expires 属性将默认为 datetime.minvalue,即 .net framework 允许的最小时间单位。
  
    要禁用会话 cookie,请在配置文件中将 cookieless 特性设置为 true,如下所示:
  
  <configuration>;
  <system.web>;
  <sessionstate cookieless="true" />;
  </system.web>;
  </configuration>;
  
    此时,假设您请求以下 url 处的页面:
  
  http://www.contoso.com/sample.aspx
  
    浏览器地址栏中实际显示的内容会有所不同,现在包含会话 id,如下所示:
  
  http://www.contoso.com/(5ylg0455mrvws1uz5mmaau45)/sample.aspx
  
    实例化会话状态 http 模块时,该模块将检查 cookieless 特性的值。如果为 true,则将请求重定向 (http 302) 到经过修改的包含会话 id(紧跟在页面名称前)的虚拟 url。再次处理请求时,请求中会包含该会话 id。如果请求启动新的会话,http 模块将生成新的会话 id,然后重定向该请求。如果回传请求,则会话 id 已经存在,因为回传使用相对 url。
  
    使用 cookieless 会话的缺点是,如果调用绝对 url,将丢失会话状态。使用 cookie 时,您可以清除地址栏,转至其他应用程序,然后返回上一个应用程序并检索相同的会话值。如果在禁用会话 cookie 时执行此操作,将丢失会话数据。例如,以下代码将打断该会话:
  
  <a runat="server" href="/code/page.aspx">;click</a>;
  
    如果需要使用绝对 url,请通过一些小技巧手动将会话 id 添加到 url 中。您可以对 httpresponse 类调用 applyapppathmodifier 方法。
  
  <a runat="server"
  href=<% =response.applyapppathmodifier("/code/page.aspx")%>; >;click</a>;
  
    applyapppathmodifier 方法将使用表示 url 的字符串,并返回嵌入会话信息的绝对 url。例如,需要从 http 页面重定向到 https 页面时,此技巧特别有用。
  
    小结
  
    会话状态最初由传统的 asp 引入,它是基于词典的 api,使开发人员能够存储会话期间的自定义数据。在 asp.net 中,会话状态支持以下两种主要功能:cookieless 会话 id 存储和传输,以及会话数据实际存储的状态提供程序。为实现这两种新功能,asp.net 利用 http 模块控制会话状态与正在处理的请求上下文之间的绑定。
  
    在传统的 asp 中,使用会话状态就是指使用 cookie。在 asp.net 中已不再如此,因为可以使用 cookieless 架构。借助 http 模块的力量,可以分解请求的 url 以使其包含会话 id,然后将其重定向。接下来,http 模块会从该 url 中提取会话 id 并使用它检索任何存储的状态。
  
    会话的物理状态可以存储在三个位置:进程内内存、进程外内存和 sql server 表。数据必须经过序列化/反序列化处理,才能供应用程序使用。http 模块会在请求开始时将会话值从提供程序复制到应用程序的内存中。请求完成后,修改后的状态将返回提供程序。这种数据通信会对性能产生不同程度的不利影响,但是会大大增强可靠性和稳定性,也使对 web farm 和 web garden 体系结构的支持更容易实现。
  
    


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons