动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP.NET技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ ASP.NET技巧 ]的信息

本月文章推荐
.关闭按钮点击事件的捕捉 .
.在ASP.NET应用中插入flash动画.
.asp.net调用存储过程方法新解.
.用ashx动态生成文件.
.ASP.NET设计网络硬盘之两重要类.
.ASP.NET2.0登陆控件的使用(常见.
.一个关于session使用的讨论.
.在ASP.NET里得到网站的域名.
.数据回发时,维护ASP.NET Tree控.
.用Asp.net屏蔽F5、Ctrl+N、Alt+F4.
."拒绝访问(Access Denied)"错误的.
.IIS URL重写模块和ASP.NET路由组.
.浅谈DotNet 保护中的字符串加密技.
.有关TextBox中输入字符控制的一种.
.利用.net反射动态调用指定程序集.
.如何在ASP.NET中获取随机生成的c.
.ASP.NET 2.0 AJAX中Webservice调.
.asp.net 2.0下一个标准GRIDVIEW功.
.编程使用资源文件实现多语言页面.
.用ASP.NET 2.0在Oracle中存取图片.

认识asp.net会话状态

发表日期:2007-6-8 |


 一、会话状态的功能
  
    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
上一篇:在.net中创建使用全球唯一标识符 人气:3369
下一篇:asp.net利用RAR实现文件压缩解压缩 人气:4044
浏览全部asp.net的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-11-21 AutoIndex v2.2.4 多国语言版
2008-11-21 ASBLOG v2.5 bulid 081118
2008-11-21 phpwebsite v1.60
2008-11-21 DreamArticle 文章管理系统 v3.0
2008-11-21 DreamArticle 文章管理系统 v3.0
2008-11-21 Piwik ( PHP统计系统,可以和GOOG
2008-11-21 CMS001 v2.2 Beta
2008-11-21 magento开源电子商务平台 v1.1.7
2008-11-21 开良马克思影视下载插件 v1.1
2008-11-21 傲游(Maxthon) 2.1.5 正式版
2008-11-21 Skype v3.8.0.188 Final
2008-11-21 AirPlay OpenAlpha 2008.11.20
2008-11-21 屏幕文字抓取工具 DWMouse1.3.510
2008-11-21 Vista一键还原(Vista Ghost)1.
2008-11-21 SP Photo Fix照片修改1.2破解版
2008-11-21 QQ腾讯聊天工具 v1.2正式版
2008-11-21 FlightTrack航班信息v1.0破解版
2008-11-21 RealPiano仿真钢琴1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成