您的当前位置:首页正文

详解ASP.NET中Session的用法

2021-12-17 来源:星星旅游
详解ASP.NET中Session的⽤法

当⽤户在应⽤程序的页之间跳转时,存储在 Session 对象中的变量不会清除,⽽⽤户在应⽤程序中访问页⾯时,这些变量始终存在。当⽤户请求来⾃应⽤程序的 Web 页时,如果该⽤户还没有会话,则 Web 服务器将⾃动创建⼀个 Session 对象。当会话过期或被放弃后,服务器将终⽌该会话。

通过向客户程序发送唯⼀的 Cookie 可以管理服务器上的 Session 对象。当⽤户第⼀次请求 ASP 应⽤程序中的某个页⾯时,ASP 要检查 HTTP 头信息,查看是否有在报⽂中有名为 ASPSESSIONID 的 Cookie 发送过来,如果有,则服务器会启动新的会话,并为该会话⽣成⼀个全局唯⼀的值,在把这个值作为新 ASPSESSIONID Cookie 的值发送给客户端,正是使⽤这种 Cookie,可以访问存储在服务器上的属于客户程序的信息。Session 对象最常见的作⽤就是存储⽤户的⾸选项。例如,如果⽤户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。另外其还经常被⽤在鉴别客户⾝份的程序中。要注意的是,会话状态仅在⽀持 cookie 的浏览器中保留,如果客户关闭了 Cookie 选项,Session 也就不能发挥作⽤了。 (⼀)Session的基本属性:⼀、属性1、SessionID

SessionID 属性返回⽤户的会话标识。在创建会话时,服务器会为每⼀个会话⽣成⼀个单独的标识。会话标识以长整形数据类型返回。在很多情况下 SessionID 可以⽤于 WEB 页⾯注册统计。2、TimeOut

Timeout 属性以分钟为单位为该应⽤程序的 Session 对象指定超时时限。如果⽤户在该超时时限之内不刷新或请求⽹页,则该会话将终⽌。⼆、⽅法

Session 对象仅有⼀个⽅法,就是 Abandon,Abandon ⽅法删除所有存储在 Session 对象中的对象并释放这些对象的源。如果您未明确地调⽤ Abandon ⽅法,⼀旦会话超时,服务器将删除这些对象。当服务器处理完当前页时,下⾯⽰例将释放会话状态。

< % Session.Abandon %>三、事件

Session 对象有两个事件可⽤于在 Session 对象启动和释放是运⾏过程。

1、Session_OnStart 事件在服务器创建新会话时发⽣。服务器在执⾏请求的页之前先处理该脚本。Session_OnStart 事件是设置会话期变量的最佳时机,因为在访问任何页之前都会先设置它们。

尽管在 Session_OnStart 事件包含 Redirect 或 End ⽅法调⽤的情况下 Session 对象仍会保持,然⽽服务器将停⽌处理Global.asa ⽂件并触发 Session_OnStart 事件的⽂件中的脚本。

为了确保⽤户在打开某个特定的 Web 页时始终启动⼀个会话,就可以在 Session_OnStart 事件中调⽤ Redirect ⽅法。当⽤户进⼊应⽤程序时,服务器将为⽤户创建⼀个会话并处理 Session_OnStart 事件脚本。您可以将脚本包含在该事件中以便检查⽤户打开的页是不是启动页,如果不是,就指⽰⽤户调⽤ Response.Redirect ⽅法启动⽹页。程序如下 :

< SCRIPT RUNAT=Server Language=VBScript>Sub Session_OnStart

startPage = \"/MyApp/StartHere.asp\"

currentPage = Request.ServerVariables(\"SCRIPT_NAME\")if strcomp(currentPage,startPage,1) thenResponse.Redirect(startPage)end ifEnd Sub< /SCRIPT>

上述程序只能在⽀持 cookie 的浏览器中运⾏。因为不⽀持 cookie 的浏览器不能返回 SessionID cookie,所以,每当⽤户请求 Web 页时,服务器都会创建⼀个新会话。这样,对于每个请求服务器都将处理 Session_OnStart 脚本并将⽤户重定向到启动页中。

2、Session_OnEnd 事件在会话被放弃或超时发⽣。

关于使⽤ Session 对象需要注意的事项 Application 对象相近,请参照前⽂。

会话可以通过以下三种⽅式启动 :

1)、⼀个新⽤户请求访问⼀个 URL,该 URL 标识了某个应⽤程序中的 .asp ⽂件,并且该应⽤程序的 Global.asa ⽂件包含Session_OnStart 过程。

2)、⽤户在 Session 对象中存储了⼀个值。

3)、⽤户请求了⼀个应⽤程序的 .asp ⽂件,并且该应⽤程序的Global.asa ⽂件使⽤ < OBJECT> 标签创建带有会话作⽤域的对象的实例。

如果⽤户在指定时间内没有请求或刷新应⽤程序中的任何页,会话将⾃动结束。这段时间的默认值是 20 分钟。可以通过在 Internet 服务管理器中设置“应⽤程序选项”属性页中的“会话超时”属性改变应⽤程序的默认超时限制设置。应依据您的 Web应⽤程序的要求和服务器的内存空间来设置此值。例如,如果您希望浏览您的 Web 应⽤程序的⽤户在每⼀页仅停留⼏分钟,就应该缩短会话的默认超时值。过长的会话超时值将导致打开的会话过多⽽耗尽您的服务器的内存资源。对于⼀个特定的会话,如果您想设置⼀个⼩于默认超时值的超时值,可以设置 Session 对象的 Timeout 属性。例如,下⾯这段脚本将超时值设置为 5 分钟。

< % Session.Timeout = 5 %>

当然你也可以设置⼀个⼤于默认设置的超时值,Session.Timeout 属性决定超时值。你还可以通过 Session 对象的

Abandon ⽅法显式结束⼀个会话。例如,在表格中提供⼀个“退出”按钮,将按钮的 ACTION 参数设置为包含下列命令的 .asp⽂件的 URL。

< % Session.Abandon %>(⼆)Session的⽤法:

⼀、使⽤Session设定权限

Session简介:简单来说就是服务器给客户端的⼀个编号。当⼀台WWW服务器运⾏时,可能有若⼲个⽤户浏览正在运正在这台服务器上的⽹站。当每个⽤户⾸次与这台WWW服务器建⽴连接时,他就与这个服务器建⽴了⼀个Session,同时服务器会⾃动为其分配⼀个SessionID,⽤以标识这个⽤户的唯⼀⾝份。这个SessionID是由WWW服务器随机产⽣的⼀个由24个字符组成的字符串。

-Session的初次使⽤:

protected void Page_Load(object sender, EventArgs e){//这是页⾯的初始化 if (!Page.IsPostBack) {//判断是否为初次执⾏

if (Object.Equals(Session[\"AdminName\"], null)) {//判断在Session[\"AdminName\"]是否存在值 Response.Redirect(\"ErrorPage.aspx\ } else

{//要是存在则记录下这个⼈的⽤户名

Name.Text = Session[\"AdminName\"].ToString(); } }}

⼆、进⾏页⾯传值

在页⾯之间传递信息有许多⽅式:第⼀:可以使⽤QueryString第⼆:可以使⽤Session第三:Server.Transfer

这三种传值⽅式都有利有弊,下⾯我以我的经验给⼤家讲解⼀下⾸先:QueryString

QueryString是⼀种⾮常简单的传值⽅式,其缺点就是会把要传递的值显⽰在浏览器的地址栏中,并且此⽅法不能够传递对象。如果你想传递⼀个安全性不是那么重要或者是⼀个简单的数值时。使⽤此⽅式最好不过。下⾯通过⼀个⼩例⼦来说明⼀下

1.创建⼀个Web页⾯,叫SendMessage.aspx

2.在页⾯内添加两个TextBox,叫TxtName,TxtEmail,与⼀个Button,叫Submit

protected void Submit_Click(object sender, EventArgs e) {

String Url = \"ReceiveMessage.aspx?Name=\" + TxtName.Text + \"&Email=\" + TxtEmail.Text; Response.Redirect(Url); }

3.再创建⼀个接收信息页⾯,叫ReceiveMessage.aspx4.在页⾯内添加两个Label,叫LbName,LbEmail

protected void Page_Load(object sender, EventArgs e)

{//使⽤Request来接收由上个页⾯传递过来的值,分别显⽰在页⾯上 LbName.Text = Request.QueryString[\"Name\"]; LbEmail.Text = Request.QueryString[\"Email\"]; }

-再次:使⽤Session变量使⽤Session变量传值是⼀种最常见的⽅式了,此种⽅式不仅可以把值传递到下⼀个页⾯,还可以交叉传递到多个页⾯,直⾄把Session变量的值Remove后,才消失下⾯举例说明

1.创建⼀个页⾯,叫SendSession

2.在页⾯内添加两个TextBox,叫TxtName,TxtEmail,添加⼀个Button,叫Submit

protected void Submit_Click(object sender, EventArgs e) {//可以使⽤Session的Add⽅法

Session[\"Name\"] = TxtName.Text;

//可以使⽤Session.Add(\"Name\ Session[\"Email\"] = TxtEmail.Text;

//可以使⽤Session.Add(\"Email\ Response.Redirect(\"ReceiveMessage.aspx\"); }

3.再创建⼀个页⾯,叫ReceiveMessage.aspx4.在页⾯内添加两个Label,叫LbName,LbEmail

protected void Page_Load(object sender, EventArgs e) {

LbName.Text = Session[\"Name\"].ToString(); LbEmail.Text = Session[\"Email\"].ToString(); Session[\"Name\"].Remove(); Session[\"Email\"].Remove(); //使⽤结束要清除Session中的值 }

这是使⽤Session传递数值,此⽅式耗费服务器的资源,尽量少使⽤-再次:使⽤Server.Transfer

这种传递⽅式有点复杂,但也可以是⼀种值传递⽅式下⾯举例说明⼀下:

1.创建⼀个页⾯,叫SendMessage.aspx

2.在页⾯内添加两个TextBox,叫TxtName,TxtEmail,添加⼀个Button,叫Submit

protected void Submit_Click(object sender, EventArgs e) {

Server.Transfer(\"ReceiveMessage.aspx\"); }

//再添加⼀个属性 public String Name { Get {

return TxtName.Text; } }

public String Email { Get {

return TxtEmail.Text; } }

3.再创建⼀个页⾯,叫ReceiveMessage.aspx4.在页⾯放两个Label,叫LbName,LbEmail

protected void Page_Load(object sender, EventArgs e) {

//创建原始窗体的实例SendMessage wf1 //获得实例化的句柄

wf1=(SendMessage)Context.Handler; Label1.Text=wf1.Name; Label2.Text=wf1.EMail;

}

以上就是本⽂的全部内容,希望对⼤家学习理解ASP.NET中Session的⽤法有所帮助。

因篇幅问题不能全部显示,请点此查看更多更全内容