|
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 的应用。
| 上网速度更快更爽、更安全下载使用Firefox火狐浏览器
|
|