Session 对象的功能和Application 对象一样,都是用来储存跨网页程序的变量或是对象,但Session 对象和Application 对象变量有些特性不太一样。Session 对象变量只针对单一网页使用者,也就是说各个联机的机器有各自的Session 对象变量,不同的联机无法互相取。Application对象变量中止于停止IIS 服务,但是Session 对象变量终止于联机机器离线时,也就是当网页使用者关掉浏览器或超过设定Session 变量对象的有效时间时,Session 对象变量就会消失。Session 对象正确的对象类别名称是HttpSessionState,Application 对象一样是属于Page对象的成员;所以可以直接使用。Session 对象的使用方式和Application 对象变量相当类似,其使用语法如下:
Session("变量名")="内容"
Session 也可以存放COM 组件,其使用语法如下:
Session("名称")=Server.CreateObject(ProgId)
下表为Session 对象常用的属性:
下表为Session 对象常用方法:
Session 对象变量最常应用在存放使用者的状态。例如在使用者登入的页面上,我们可以将代表使用者登入网页的成功与否状态储存到一个变量中,然后在其它网页加入判断使用者是否登入成功与否的程序代码。如果登入成功才可以浏览某些网页,如果登入失败则限制或拒绝使用者的浏览。下列范例使用者必须成功通过登入网页EX16.aspx 的验证,才可以浏览EX17.aspx 网页。其验证的程序从会员数据表中判断使用者所填入的名称及密码是否正确,如下所示:
Sub btnSubmit_Click(Sender As Object,e As Eventargs) Dim strConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:InetPubwwwrootCRCH08MyWeb.mdb" Dim strComStr As String = "Select * From Members Where UserId = '" & txtID.Text & "' And UserPwd = '" & txtPassword.Text & "'" Dim dscA As ADODataSetCommand = New ADODataSetCommand(strComStr,strConStr) Dim dsDataSet As DataSet = New DataSet() dscA.FillDataSet(dsDataSet, "Members") If dsDataSet.Tables("Members").Rows.Count=1 Then Session("Id")=txtID.Text Session("IsPassed")="True" Page.Navigate("EX17.aspx") '将连结导向至EX17.aspx Else Label1.Text="验证失败! 请重新输入" End If End Sub Sub btnReset_Click(Sender As Object,e As Eventargs) txtID.Text="" txtPassword.Text="" End Sub </Script> </Html>
上述范例我们将使用者所输入的使用者名称及密码转成SQL 查询叙述,并存放于变量strComStr中;如下所示:
Dim strComStr As String = "Select * From Members Where UserId = '" & _ txtID.Text & "' And UserPwd = '" & txtPassword.Text & "'"
倘若使用者输入的账号及密码分别为「rex」以及「sewq」,则strComStr 的内容为「Select * FromMembers Where UserId = 'rex' And UserPwd = 'sewq'」。由于SQL 的语法规定字符串必需被单引号「'」包围,所以请特别注意单引号的部分。我们将上述SQL 陈述的执行结果填入DataSet对象中,并且判断DataTable 对象Rows 集合的Count 属性,如果为1 就表示有找到该使用者;如下程序代码片段所示:
If dsDataSet.Tables("Members").Rows.Count=1 Then Session("Id")=txtID.Text Session("IsPassed")="True" Page.Navigate("EX17.aspx") '将连结导向至EX17.aspx Else Label1.Text="验证失败! 请重新输入" End If
上述程序代码若使用者通过验证,则将Session 对象的Id 变量以及IsPassword 变量的值分别填入使用者所数入的账号以及True,然后将网页连结导向EX17.aspx。我们就可以在EX17.aspx在Page_Load 事件程序中取回Session 对象中IsPassed 变量,如下程序所示:
<Html> 您的输入已经通过验证. <Script Language="VB" Runat="Server"> Sub Page_Load(Sender As Object,e As Eventargs) If Session("IsPassed")=Nothing Or Session("IsPassed")<>"True" Then Response.Redirect("EX16.aspx") End If End Sub </Script> </Html> 如果我们通过验证,就可以成功的浏览EX17.aspx 网页。倘若我们尝试直接利用浏览器直接浏览EX17.aspx 网页时,因为Session("IsPassed") 变量内并没有内容,所以网页会自动导向EX16.aspx 登入网页。
|