在SQL Server数据库里存储Session_第1页
在SQL Server数据库里存储Session_第2页
在SQL Server数据库里存储Session_第3页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在SQL Server数据库里存储SessionHTTP是个状态很不确定的协议,为了允许用户通过请求保存状态信息,ASP.NET提供了Session存储机制。这些Session变量按每个用户被存储起来。在传统的ASP里,你只能在Web服务器的内存里暂时存储Session变量,但是这个方法已经被证明了在扩展性和可依赖性上的不足。在ASP.NET里,你可以为你的每个请求定制Session状态存储。本文将探讨存储Session变量可伸缩性和可靠性都很好的方式之一的SQL Server 。在传统的ASP里 ,默认的Session状态保存在服务器的内存中。 但是,这种做法带来两方面的问题:(1)它让服务器超负荷,影响了网站服务器的伸缩性能。(2)它不能有效地应用于Web服务器群。让我在一些细节上讨论这些问题,使你能为你选择了Session存储感到庆幸。 Session变量依据每个用户为基础生成。 默认情况下,它们都保留在Web服务器的内存中。 想象一个有着成千上万用户的网站。 由于巨大的用户数量, Web服务器存储的活跃Session的数目也将非常的多。 这意味着你存放着非常多的session数据在Web服务器的内存中。 如果不断的对服务器增加负载, 它可能达到饱和,以至造成对应用程序整体扩展性能上的不良影响。 为了解决这个影响到扩展性能的问题,实现Web集群。所谓的 Web集群是一组网络服务器并行运行, 服务器集群里的每个Web服务器都有您的网站的一个镜像。您的网站的流通负载平均分配给每个可用的服务器,从而达到负载平衡。 在Web服务器的内存里存储Session变量会阻碍Web集群的建立,下面将举例来说明: 假定有三个Web服务器:S1 , S2 ,和S3 。并行地连接在一起接受用户请求。 假定这个时候有一个请求R1来到服务器集群并且负载平衡逻辑判定 S2,S3都因为某些其他的任务而没有空闲,但是S1可以处理这个请求。很显然,这个请求会被送到S1进行处理。现在,想象在这个处理过程当中你在S1的内存中存储了某个Session变量。到目前为止,一切还很好。过了一些时间,同样的用户有了另一个请求R2,这个请求需要上一个请求所存储的Session变量。但是这个时候S1已经被一些任务使用着,而S2,S3却处于空闲的状态。你可以猜到根据每一条的负载平衡规则,R2将会被送到S2进行处理。但是,如果那发生了,S2怎么能够得到Session变量?毕竟,它们存储在和S2完全没有任何关联的Web服务器S1的内存中。这意味着R2仍然得等待S1的空闲。这种事情很显然是Web服务器群资源的浪费。 ASP.NET 2.0及其Session信息存储ASP.NET 2.0允许你存储session变量在三个不同地方:(1)在网站服务器的内存中存储(进程中的)。 (2)在一台专门用来存放Session变量的服务器中存储。( Session状态信息存储服务器 )(3)在一个SQL Server的数据库里面存储。默认情况是第一种存储模式。 模式二和模式三通常被称为“进程外”的模式,因为Session变量的存储和Web站点没有关系。 在这篇文章,你将被限制在只探索第三种模式。在SQL Server数据库里存储Session变量具有以下优点: (1)可扩展性: 如果您正在找一个高度可扩展性的方法来储存Session变量 ,SQL Server正是如此,它比其它的可扩展性更好。 Web服务器群可以很容易地获取Session变量,因为它们都储存在一个独立的数据库。(2)可靠性:因为数据是很真实的存放在数据库里面,它比其他方法都要好。不用去担心服务器重启的问题。(3)安全: SQL Server比在内存或Session状态信息存储服务器中更安全。 你可以更简单的通过配置SQL Server的安全选项来保护你的数据。在web.config 文件里,可以通过定义一个来配置Session状态模式 。 备注:如果是在Web服务器群里, Web服务器群的每一台服务器的IIS METABASE的应用程序路径应该是完全相同的。Session结束事件不会因为任何进程之外的模式发生。配置SQL Server来储存Session状态在你真正的在SQL Server存储Session状态之前, 你需要先配置它。 配置工作都是通过一个名为aspnet_regsql.exe的命令行工具来完成的。 在SQL Server里面,你可以在三个可能的地点存储Session状态, (1)临时存储: 在这种情况下,Session状态保存在SQL Server的tempdb 数据库里面。 该工具建立一个数据库名为aspstate并增加特定的存储过程来管理要保存的Session信息。 这个工具还创建tempdb 数据库所需的表。 如果您重新启动SQL Server服务,Session信息不会丢失。 (2)持久存储: 该工具建立一个数据库名为aspstate并增加特定的存储过程来管理要保存的Session信息。 Session状态信息储存在aspstate数据库里。 这种方法的优点是,即使您重新启动的SQL Server 。 Session信息也不会丢失。 (2)定制存储:Session状态信息和数据存储过程都有用户定制存储。 同时数据库的名称必须在配置文件中声明。 下面的表列出了这个工具与Session存储配置相关的各种命令行开关:命令行开关备注-S 指定你想要存储Session状态信息的SQL Server服务器的IP地址或者服务器名。-U指定和SQL Server连接时使用的用户名。-P指定和SQL Server连接时使用的用户的密码。-E指出你想要连接的SQL Server服务器需要完整的安全策略-ssadd添加支持服务器模式的session状态-ssremove移除支持服务器模式的session状态-sstypeSession状态支持的类型,一下是可以支持的类型:t 代表临时存储p 代表持久存储c 代表定制储存-d 用于使用的数据库的名字如果要转换-sstype,就用命令“c“表单和创建的存储过程作为一个开发人员, 你可能从来无法直接影响session状态数据库。 然而, 当你运行ASPNET_REGSQL.EXE 工具, 你将会对表单和数据库的创建会有一个很好的理解。配置 1:在SQL数据库服务器中创建表单配置 2:在数据库服务器中创建存储过程配置你的网站来存储Session 状态一旦你配置你的SQL服务器来支持session状态存储,下一步就是配置你的网站了。web.config 的标记允许你指定session存储的信息。下列的表中列出了一些这个标记得重要属性:属性描述modeMode属性可以使用一下的几个值: Off:指示这个session状态关闭.InProc: 指示这个session 将被存储在web服务器的内存中。这是默认的设置 StateServer:指示这个session将被储存在一个状态服务器中 SQLServer: 指示这个session将被储存在一个SQL服务器的数据库中.Custom: 指示你将会有一个定制的session存储机制,这个机制使用了ASP.NET的提供的模式sqlConnectionString如果模式被设置为SQL服务器,你必须指定这个属性。这个属性指定了那个SQL服务器数据库的连接字符串。这个数据库的是用来进行状态的存储的。注意,如果你使用了临时的或者持久的存储选项时候,你不需要在连接字符串中指定数据库的名称(见上)。allowCustomSqlDatabase如果你想去存储session状态在一个你自己的SQL服务器的数据库中的时候,你必须设置这个属性为“TRUE”。一旦这个属性被设置为true,你要在上面说描述的连接字符串中指定数据库的名称。例子你可以开发一个简单的网站,设置它来存储一个在SQL服务器数据库中的sesseion状态,来示例你到目前为止所学的东西。设置SQL服务器打开Visual Studio.NET 2005命令提示器,使用一下命令aspnet_regsql -ssadd -S .sqlexpress -E -sstype paspnet_regsql -ssadd -S .sqlexpress -E -sstype p现在,你正在使用带着完整安全属性的SQL Express数据库。配置 3 展示了一个把带着session 状态类型的工具设置为persistent的例子。配置3:运行_regsql.exe工具创建和配置一个网站现在,创建一个新的网站,修改web.config文件成下列的代码这里,你添加了这个标记,设置它的模式属性为SQLServer。你还要指定sqlConnectionString属性,把它指向你的SQL SERVER。创建测试网站的WEB窗体在WEB站点中添加两个WEB窗体。这两个窗体分别叫page1.aspx和page2.aspx。第一个WEB窗体将显示一个产品列表来选择。被选择的产品被保存在一个DataSet中。然后通过保存这个DataSet 在一个session变量中来把它在请求中传递。第二个Web窗体简单的显示了来自DataSet中的被选择的产品。通过一下的步骤来完成第一个Web 窗体: 拖拉一个GRIDVIEW控件和一个SQL Data Source控件在WEB FORM上. 配置SQL Data Source, 从Northwind 数据库的Products 表中选择ProductID, ProductName, 与 UnitPrice columns 通过设置他的DataSourceID属性到SQL Data Source控件的ID属性上来绑定GridView到SQL Data Source上. 在GridView的samrt标记上, 点击Allow Selection checkbox. 添加一个HyperLink 控件,设置NavigateUrl属性到Page2.aspx. 创建一个 DataSet 和 DataTable. FataTable 包含两个DataColumns: ProducyName 和 Qty. 然后你存储一个session变量myds.当用户选择一个产品的时候, 你可以创建一个新的DataRow, 分配产品的资料给它, 添加这个ROW去DataTable. 用户的选择可以在跨多个请求中持续. 按一下的步骤创建第二张的Web form 拖拉一个GridView到Web form上. 添加两个绑定区域 设置第一个绑定区域的HeaderText属性成Product Name. 同样的,设置DataField成Product Name. 设置第二个绑定区域的HeaderText属性成Quantity. 同样的,设置DataField成 Qty . 添加下列的代码到第二张Web Form 的 Page_Load event handler上protected void Page_Load(object sender, EventArgs e) GridView1.DataSource=(DataSet)Sessionmyds; GridView1.DataBind();这里,你设置GridView控件的DataSource属性到你的储存在session上的DATASET.然后你通过调用DataBind() 方法来绑定GridView.运行WEB FORMS 的例子为了测试你的WEB FORMS, 设置Page.aspx 作为你的起始页, 然后运行你的WEB SITE. 你应该看到如图4所展示的:Figure 4: 运行Page1.aspx 的例子 通过”Add to cart”按钮选择一些产品. 这将会添加一些行在DataTable上. 记得你正在存储你的DataSet在一个session变量之中. 然后,通过点击”Show mycart” 超链接导航到 Page.aspx . 图5显示了带着前面所选的产Page.aspx. 配置 5: 运行Page2.aspx的例子正如你所见的, Page2.aspx 正确的显示了你在前页所选的那些条目. 这显示你的session 变量被真正的存储在了SQL服务器的数据库中,并被在第二页中找回. 还有, 注意你在无关储存模式的session中用了相同的存储调用值得标记.储存Session状态在SQL服务器中的劣势虽然存储session状态在SQL 服务器中可以使你的网站更容易拓展和更稳定. 但是这个技术有一下的几个劣势执行上: 在执行的几个项目中,一个基于SQL SERVER的session 存储可能是一个最慢地选择. 因为你的session变量是存储在物理的数据库中.它用了更多的时候去存储和读取数据库. 这会影响了你的网站的运行速度. 花费: 因为你存储你的数据在数据库中, 你需要一个S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论