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 的应用。