设定Cookie 变量的生命周期

发表于:2007-07-14来源:作者:点击数: 标签:
Cookie 变量虽然存放在Client 端机器上,却也不是永远不会消失的。系统预设给Cookie 变量的有效时间是1000 分钟,不过我们可以在程序中自行设定有效日期,只要指定Cookie 变量的Expires 属性即可。使用语法如下所示: Response.Cookies(CookieName).Expires=


    Cookie 变量虽然存放在Client 端机器上,却也不是永远不会消失的。系统预设给Cookie 变量的有效时间是1000 分钟,不过我们可以在程序中自行设定有效日期,只要指定Cookie 变量的Expires 属性即可。使用语法如下所示:

Response.Cookies(CookieName).Expires=#日期#

    若我们没有指定Expires 属性,则Cookie 变量将不会被储存,会像Session 一样浏览器关闭 结束浏览便被毁灭。不Cookie 一但设定有效期限后,除非我们将Expires 属性设为「dbNull」, 否则有日期期限的Cookie 无法被移除。所谓「dbNull」值代表「空」值,「空」的意思是什么 都没有;所以有设定有效日期的Cookie 就可以被移除。下列范例在使用者登入后,在一个月内 浏览页都不需要再登入;并且每次登入时,程序自动将Cookie 有效期限往登入日期后延长一个 月:

<Html>
<ASP:Panel Id="Pan1" Runat="Server">
<Form Runat="Server">
<Table>
<Tr>
<Td>账号:</Td>
<Td><Asp:TextBox Id="txtID" Runat="Server" /></Td>
</Tr>
<Tr>
<Td>密码:</Td>
<Td><Asp:TextBox TextMode="Password" Id="txtPassword"
Runat="Server" /></Td>
</Tr>
</Table>
<ASP:Button Id="btnSubmit" Text="确定" OnClick="btnSubmit_Click"
Runat="Server"/>
<ASP:Button Id="btnReset" Text="清除" OnClick="btnReset_Click"
Runat="Server"/>
<ASP:Label Id="Label1" Text="请输入账号及密码" Runat="Server"/>
</Form>
</ASP:Panel>
<ASP:Panel Id="Pan2" Runat="Server">
Hi! <ASP:Label Id="lblMsg" Runat="Server"/> ,欢迎光临
</ASP:Panel>
<Script Language="VB" Runat="Server">
Sub Page_Load(Sender As Object,e As EventArgs)
If Request.Cookies.Item("MyWeb_UserID")=dbNull Or _
Request.Cookies.Item("MyWeb_UserID").Value="" Then
Pan2.Visible=False
Else
Response.Cookies.Item("MyWeb_UserID").Expires=Now.AddMonths(1)
lblMsg.Text=Request.Cookies.Item("MyWeb_UserID").Value
Pan1.Visible=False
End If
End Sub
Sub btnSubmit_Click(Sender As Object, e As EventArgs)
If txtID.Text="charles" and txtPassword.Text="1234" Then
Response.Cookies("MyWeb_UserID").Value=txtID.Text
Response.Cookies.Item("MyWeb_UserID").Expires=Now.AddMonths(1)
Pan1.Visible="False"
Pan2.Visible="True"
lblMsg.Text=txtID.Text
End If
End Sub
Sub btnReset_Click(Sender As Object, e As EventArgs)
txtID.Text=""
txtPassword.Text=""
End Sub
</Script>
</Html>

    上述程序代码范例中我们使用两个Panel,分别为Pan1 以及Pan2;Pan1 为要求使用者输入账号及密码,而Pan2 则为欢迎语。程序执行时若使用者的Cookie 不存在或没有数据,将欢迎语隐藏;如下列程序代码片段所示:

Sub Page_Load(Sender As Object,e As EventArgs)
If Request.Cookies.Item("MyWeb_UserID")=dbNull Or _
Request.Cookies.Item("MyWeb_UserID").Value="" Then
Pan2.Visible=False
Else
Response.Cookies.Item("MyWeb_UserID").Expires=Now.AddMonths(1)
lblMsg.Text=Request.Cookies.Item("MyWeb_UserID").Value
Pan1.Visible=False
End If
End Sub

    上列程序代码片段中我们先判断Cookie 对象是否存在,以及确定Cookie 中是有内容;如果Cookie 不存在或是Cookie 内没有资料,则显示Pan1 要求使用者登入的画面;倘若Cookie 存在,则显示Pan2 出现欢迎语:

    使用者若输入正确的使用者名称后,我们便将使用者账号写入Cookie 中,并指定有效期限为一个月内;如下程序代码片段所示:

Sub btnSubmit_Click(Sender As Object, e As EventArgs)
If txtID.Text="charles" and txtPassword.Text="1234" Then
Response.Cookies("MyWeb_UserID").Value=txtID.Text
Response.Cookies.Item("MyWeb_UserID").Expires=Now.AddMonths(1)
Pan1.Visible="False"
Pan2.Visible="True"
lblMsg.Text=txtID.Text
End If
End Sub

下次使用者再浏览网页的时候,只要在一个月内有登入过,就不需要再输入使用者账号及密码,而直接出现下列画面:



Cookie 验证的安全考量
    在使用Cookie 验证使用者时,必须要考虑到身分验证的问题。因为使用者可能在非私人的计算机上浏览,或是个人计算机的安全防护不完善;导致其它人可能使用同一个浏览器上站,这样一来任何人都可以顺利的通过Cookie 的验证。对于有机密考量的数据或是有价交易的处理,势必造成漏洞;设计这方面的网站时,要小心仔细考量Cookie 的应用。

原文转自:http://www.ltesting.net