全部显示
ASP.NET 提供 Web 应用程序需要的跨请求状态信息(购物车、数据滚动等)基础结构,并带有内置的会话状态功能,使您可以采取以下操作:
对从单个浏览器客户端到服务器上逻辑应用程序会话的请求进行自动识别和分类。
将会话范围的数据存储在服务器上以供跨多个浏览器请求使用。
引发适当的可在应用程序代码中处理的会话生存期管理事件(Session_OnStart、Session_OnEnd 等)。
注意 Session_OnEnd 事件仅支持进程内会话状态模式。如果您使用状态服务器或 SQL Server 模式,则不会引发该事件。
如果浏览器不在指定的超时时间内重新访问应用程序,则自动释放会话数据。
本主题提供会话状态的概述,介绍如何标识和跟踪活动 ASP.NET 会话;解释会话状态存储和一般结构,并以一个高级代码示例作为总结。
会话状态概述
HTTP 是一个无状态的协议,这意味着它不自动指示一个请求序列是否都来自相同的客户端,甚至不指示单个浏览器实例是否仍活跃地查看某个页或站点。因此,如果没有其他基础结构的帮助,要想生成需要维护某些跨请求状态信息的 Web 应用程序,如购物车、数据滚动等,就可能会非常困难。
ASP.NET 提供以下会话支持:
便于使用的会话状态功能,该功能是 ASP 开发人员所熟悉的,与其他 .NET Framework API 兼容。
可靠的会话状态功能,可以经受得住 Internet 信息服务 (IIS) 重新启动和辅助进程重新启动而不丢失会话数据。
可缩放的会话状态功能,该功能可用于网络场(多计算机)和网络园(多进程)两种情况,使管理员可以将更多的处理器分配给 Web 应用程序以提高它的可缩放性。
用于不支持 HTTP Cookie 的浏览器的会话状态功能。
对于核心会话状态方案,其吞吐量相当于(或高于)ASP 的吞吐量(当向购物车放入项时 50/50 读/写,修改访问的最后一页,验证信用卡详细信息等)。
但是,会话状态不跨 Web 应用程序边界保持。如果执行期间一个 Web 应用程序切换到另一个应用程序,则会话信息不能用于新应用程序。
< %@ LANGUAGE="VBSCRIPT" % >
< %
Survey=Request.Cookies("KensSurvey")
If Survey ="" then
Response.Cookies("KensSurvey")="x"
Response.Cookies("KensSurvey").Expires=#January 01, 2010#
Response.Redirect "survey.asp"
Else
'rest of the page
End if
% >
好,下面开始从头讨论上面的代码。
< %@ LANGUAGE="VBSCRIPT" % >
< %
RequestName = Request.Form("Name")
RequestLeaveMeAlone = Request.Form("LeaveMeAlone")
If RequestName < >"" or RequestLeaveMeAlone < >"" then
Response.Cookies("MySiteVisitorName") = RequestName
Response.Cookies("MySiteVisitorName").Expires = #January 01, 2010#
Response.Cookies("MySiteLeaveMeAlone") = RequestLeaveMeAlone
Response.Cookies("MySiteLeaveMeAlone").Expires = #January 01, 2010#
End if
VisitorName = request.cookies("MySiteVisitorName")
LeaveMeAlone = request.cookies("MySiteLeaveMeAlone")
If VisitorName ="" and LeaveMeAlone ="" then
% >
< HTML > < HEAD > < /HEAD >
< body bgcolor="#ccffff" text="black" link="navy" vlink="purple" >
< DIV ALIGN="CENTER" >
< form action="index.asp" method="POST" >
< H2 >Let's be friends< /H2 >
What's your name (leave blank and hit the Submit button if you don't want us to know)?
< input type="text" name="name" >< BR >< BR >
< input type="hidden" name="LeaveMeAlone" value="x" >
< input type="submit" value="Submit" >
< /FORM >
< /DIV >
< /BODY >
< %
End if
If VisitorName < > "" then
Response.write "Hi, " & VisitorName & "! I hope you are having a great day!"
End if
'rest of the page
% >
好,现在来看看上面的代码实现执行了什么。首先,设置页面。然后,检查表单变量(在同一个页面中)。如果表单变量存在,就创建cookie,并设置到期时间。
< %@ LANGUAGE="VBSCRIPT" % >
< %
RequestName = Request.Form("Name")
RequestLeaveMeAlone = Request.Form("LeaveMeAlone")
If RequestName < >"" or RequestLeaveMeAlone < >"" then
Response.Cookies("MySiteVisitorName") = RequestName
Response.Cookies("MySiteVisitorName").Expires = #January 01, 2010#
Response.Cookies("MySiteLeaveMeAlone") = RequestLeaveMeAlone
Response.Cookies("MySiteLeaveMeAlone").Expires = #January 01, 2010#
End if
If VisitorName ="" and LeaveMeAlone ="" then
% >
< HTML >
< HEAD >
< /HEAD >
< body bgcolor="#ccffff" text="black" link="navy" vlink="purple" >
< DIV ALIGN="CENTER" >
< form action="index.asp" method="POST" >
< H2 >Let's be friends< /H2 >
What's your name (leave blank and hit the Submit button if you don't want us to know)?
< input type="text" name="name" >< br >< br >
< input type="hidden" name="LeaveMeAlone" value="x" >
< input type="submit" value="Submit" >
< /FORM >
< /DIV >
< /BODY >
< %
End if
如果cookie已经存在,并且用户名字存在,就显示给访问者一个欢迎界面,然后执行其余的代码。
If VisitorName < > "" then
Response.write "Hi, " & VisitorName & "! I hope you are having a great day!"
End if
'rest of the page
% >
尽管上面的这个例子很简单,但可以从中扩展许多富有创造力的应用。你可以在表单中加入许多功能,以便定制化web站点。你还可以让访问者定制网站的色彩、字体,以至于其他web元素。有可能的话,你可以询问访问者的生日,当访问者在那一天来访时,你就可以显示“生日快乐”的信息给他。