电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 网络编程 -> ASP.NET教程
认识asp.net会话状态_asp.net技巧
作者:网友供稿 点击:0
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
 一、会话状态的功能
  
    HTTP 是一个无状态的协议,所以它不自动指示一个请求序列是否都来自相同的客户端,甚至不指示单个浏览器实例是否仍活跃地查看某个页或站点。而使用ASP.net内置的会话状态功能,可以使用我们做到
  
    1、对从单个浏览器客户端到服务器上逻辑应用程序会话的请求进行自动识别和分类。
  
    2、将会话范围的数据存储在服务器上以供跨多个浏览器请求使用。
  
    3、引发适当的可在应用程序代码中处理的会话生存期管理事件(Session_OnStart、Session_OnEnd 等)
  
    二、会话状态的标识
  
    在创建会话时,服务器会为每一个会话生成一个单独的标识。该标识用 120 位的 SessionID 字符串表示,该字符串只包含 URL 中所允许使用的 ASCII 字符。SessionID 值是使用保证唯一性和随机性的算法生成的,其中保证唯一性的目的是确保会话不冲突,保证随机性的目的是确保怀有恶意的用户不能使用新的 SessionID 来计算现有会话的 SessionID。
  
    三、会话状态的存储方式
  
    会话状态有三种存储方式
  
    1、进程内会话状态模式(Inproc):当我们新建一个Web程序后默认的采用的进程内会话状态模式,这也是大家所普遍采用的模式。在这种模式下会话状态存储在本地的 ASP.NET 辅助进程中,可以说到目前为止,进程内会话状态模式可能是最快的访问选项。但会话中存储的数据越多,Web 服务器所消耗的内存就越多,这样会潜在地增加性能降低的风险。
  
    2、.NET 状态服务器模式(StateServer):会话状态存储在远程进程中(例如,名为 aspnet_state.exe的 indows NT 服务中)
  
    3、SQL 模式(SQLServer):会话状态存储到由 SQL Server 管理的专用数据库表中。
  
    .NET 状态服务器模式和SQL 模式都可以称为进程外会话模式,当储存数据时,需要将数据序列化储存到外部储备库,当读取和数据时,需要将数据反序列化,复制到本地会话词典中,所以请求导致性能下降了 15%(进程外)到 25% (SQL Server)。注意这只是一种粗略的估计。但是在进程外存储方案中,会话状态存活的时间较长,使应用程序的功能更强大,因为它可以防止 Microsoft? Internet 信息服务 (IIS) 和ASP.NET 失败。通过将会话状态与应用程序相分离,您还可以更容易地将现有应用程序扩展到 Web Farm 和 Web Garden 体系结构中。另外,会话状态存储在外部进程中,从根本上消除了由于进程循环而导致的周期性数据丢失的风险。
  
    四、会话状态的配置
  
    会话状态的配置是通过设置Web.config文件的<sessionState>节来实现的。下面介绍一下三种会话状态的具体配置方法
  
    1、进程内模式
  
    进程内模式是默认的会话状态模式。若要使用进程内模式,请将 <sessionState> 元素的 mode 属性设置为 Inproc。
  
    下面显示了进程内模式的一个配置设置示例。 http://www.knowsky.com
  
  <configuration>
  <system.web>
  <sessionState mode="Inproc"
  cookieless="false"
  timeout="20"/>
  </sessionState>
  </system.web>
  </configuration>
  
    2、状态服务器模式
  
    若要使用状态服务器,必须首先确保 ASP.NET 状态服务运行在用于会话存储的远程服务器上。此服务与ASP.NET 和 Visual Studio .NET 一起安装在以下位置:
  
  systemroot\Microsoft.NET\Framework\versionNumber\aspnet_state.exe
  
    然后,在应用程序的 Web.config 文件中,将 <sessionState> 元素的 mode 属性设置为 StateServer。最后,将 connectionString 属性设置为 tcpip=serverName:portNumber。
  
    下面是状态服务器模式的一个配置设置示例。
  
  <configuration>
  <system.web>
  <sessionState mode="StateServer"
  stateConnectionString="tcpip=dataserver:42424"
  cookieless="false"
  timeout="20"/>
  </sessionState>
  </system.web>
  
    3、SQL Server 模式
  
    若要使用 SQL Server,首先在将存储会话状态的 SQL Server 计算机上,运行 InstallSqlState.sql 或 InstallPersistSqlState.sql。两个脚本均创建一个名为 ASPState 的数据库,它包含若干存储过程。
  
    两个脚本间的差异在于放置 ASPStateTempApplications 和 ASPStateTempSessions 表的位置。InstallSqlState.sql 脚本将这些表添加到 TempDB 数据库,该数据库在计算机重新启动时将丢失数据。相反,InstallPersistSqlState.sql 脚本将这些表添加到 ASPState 数据库,该数据库允许在计算机重新启动时保留会话数据。
  
    默认情况下,两个脚本文件均安装在下面的位置:
  
  systemroot\Microsoft.NET\Framework\versionNumber
  
    然后,在应用程序的 Web.config 文件中,将 <sessionState> 元素的 mode 属性设置为 SQLServer。最后,将 sqlConnectionString 属性设置为 Integrated Security=SSPI;data source=serverName;。
  
    下面显示了 SQL Server 模式的一个配置设置示例。
  
  <configuration>
  <system.web>
  <sessionState mode="SQLServer"
  sqlConnectionString=" Integrated Security=SSPI;data source=dataserver;"
  cookieless="false"
  timeout="20"/>
  </sessionState>
  </system.web>
  </configuration>
  
    在 SQL Server 模式中,也可以将会话状态配置为在故障转移群集中工作。故障转移群集是两个或更多相同的冗余 Web 服务器,它们将会话数据存储在一台单独的计算机上的 SQL Server 数据库中。如果一个 Web 服务器出现故障,群集中的另一个服务器会接管它的工作,为请求提供服务,会话数据不会丢失。
  
    若要配置故障转移群集,请将 Web 服务器的 Web.config 文件中的 <machinekey> 元素设置为相同的值。
  
    然后将 Web 服务器的 SQL 连接字符串设置为指向计算机上存储会话数据的 SQL Server 数据库。
  
    五、会话状态的访问
  
    你可以直接通过Session集合来实现对会话状态的访问。为了与 ASP 的早期版本兼容,还可以通过应用程序对象上的 Session.Contents 属性来实现对会话状态的访问。
  
    下面的示例显示在第一个网页将两个值写入Session集合,然后再在第二个网页读取Session集合。注:此处省略了页代码。
  
    第一个网页,将值写入Session集合
  
  dim name as string = "a"
  dim id as integer = "1"
  session("name") = name
  session("id") = id
  第二个网页,从Session集合获取值
  dim name as string = session("name")
  dim id as integer = session("id")
  获取获取会话状态集合中的项数
  dim i as integer = session.count
  
    注意,在进程内模式,未发生真正的序列化和反序列化,所以对象作为各自类的活动实例存储在会话状态中。
  
    而在进程外会话模式,因为使用了序列化和反序列化,所以你要根据情况对数据类型进行转换。
  
    如对日期值执行序列化操作,日期应为 Int64 类型。
  
    六、会话生存期管理事件
  
    会话生存期管理事件有两个Session_OnStart事件和Session_OnEnd事件,你可以在Global.asax.VB文件中对它们进行设置
  
    1、Session_OnStart事件
  
    当从单个浏览器客户端连接到服务器上时,就会触发Session_OnStart事件,它标志着会话的开始,在此后的浏览过程中,将不在触发该事件,除非此次会话超时或被放弃。Session_OnStart 事件是设置会话期变量的最佳时机,因为在访问任何页之前都会先设置它们。
  
    示例:下面的示例是比较常用到的统计在线人数的Session_OnStart 事件代码:
  
  Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
  当事件发生时,将在线用户的人数加1
  Application("usercount") = Application("usercount") + 1
  End Sub
  
    2、Session_OnEnd事件
  
    Session_OnEnd 事件在会话被放弃或超时发生,它标志着事件的结束。但请注意,只有 InProc 模式支持该事件。你可以通过Web.config文件的<sessionState>节的timeout属性来指定超时时限,如果用户在该超时时限之内(以分钟为单位,默认是20分
  钟)不刷新或请求网页,则该会话将终止。可以利用Session_OnEnd 事件做一些清理工作。
  
    示例:下面的示例是比较常用到的统计在线人数的Session_OnEnd 事件代码:
  
  Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
  Application("usercount") = Application("usercount") - 1
  End Sub

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·让asp.net简便使用script_asp.net技巧
·asp.net atlas对javascript的扩展_asp.net技巧
·asp.net服务器控件编程之热身运动_asp.net技巧
·.net下生产图片验证码_asp.net技巧
·.net分页控件发布_asp.net技巧
·如何在搜索结果出来之前,让页面显示“等待中...” _asp.net技巧
·sharpwebmail介绍和安装_asp.net技巧
·photoshop黑人照片肤色漂白变白人_photoshop教程
·做完一个小网站的一点经验总结(2): asp.net+access程序运行环境的配置_asp.net实例
·将web站点下的绝对路径转换为虚拟路径_asp.net技巧

最新文章
·对.net framework 反射的反思_asp.net技巧
·.net3.5和vs2008中的asp.net ajax_asp.net技巧
·使用asp.net ajax框架扩展html map控件_asp.net技巧
·asp.net应用程序资源访问安全模型_asp.net技巧
·photoshop初学者轻松绘制螺旋漩涡特效_photoshop教程
·photoshop通道结合图层模式抠狗尾巴草_photoshop教程
·web.config详解+asp.net优化_asp.net技巧
·asp.net中多彩下拉框的实现_asp.net技巧
·asp.net中数据校验部分的封装与应用_asp.net技巧
·asp.net网络编程中常用到的27个函数集_asp.net基础


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号