计
算
机
与
现
代
化
2004年第l期
就完成了浏览器的认证。浏览器创建了一个Cookie后,对于每一个针对该网站的请求,都会在Header中带着这个Cookie,直到Cookie过期为止;不过,对于针对其他网站的请求,Cookie不会跟着发送。服务器执行完程序后,返回的第一行语句必须是一个HTTP标头,它将告诉客户端浏览器现在返回什么类型的输出,只有使用服务器端包含ServerSideIncIude)(的脚本没有这个要求。有关HTTP标头的详细内容参见表l。
表1
回应类型普通文本HTML页面GIF图片重定向到其他页面Cookie错误消息
[3]HTTP标头
列表 Secure
Web服务器使用HTTPCOOKIE把Cookie的信息传它可以自动解析HTTPCOOK递给CGI。对于PHP,并把结果存入!HTTPIE变量,[4]组。1.3COOKIEVARS数
PHP中的Cookie在PHP中,由于有PHP4.0自动对Cookie的支[5]持,非常简单。比如设置一个名为mycookie的并产生一个与之对Cookie,PHP会自动对它进行分析,应的变量,为!mycookie,个变量的值就是名这有如下几个SetCookie函数:Cookie的值。例如:
(;SetCookie"acookie",test")"a((+;SetCookie"expire","thisonewiIIexpireinlhour",time)3600)([""vaIuel");SetCookie"cookiearray0],([""vaIue2");SetCookie"cookiearrayl],
HTTP标头ContentType:text/pIainContenttype:text/htmIContenttype:image/gifLocation:http:/.../Setcookie:...Status:...
其中设置的Cookie,可以这样引用:
echo!acookie;echo!expire;[;echo!cookiearray0](;echocount!cookiearray)
在服务器响应请求的过程中,用到了SetCookie函数,以下是对此函数的一些解释说明:SetCookieInt(stringname,stringvaIue,intexpire,stringpath,string;domain,intsecure)(l)表name参数,示Cookie的名称。除了name参数其他都是可以省略的;(2)表示Cookie的值,如果这个参数vaIue参数,为空字符串则表示取消浏览器是该Cookie的数据;(3)表示设置此Cookie什么时候过期expire参数,(被清除)单位是秒,,它是一个标准的Unix时间标记,可以用time)mktime)(或(函数获取;(4)参数,表示Cookie的相关路径;path(5)表示Cookie网站的域名,只有当domain参数,客户向这个站点发送请求的时候才读取Cookie,否则,不读取Cookie;(6)表示设置这个Cookie是否通过secure参数,加密的HTTPS协议在网络上传输。事实上,这个SetCookie函数的使用过程中,在Cookie正是由表l中的Header标题函数进行传递的。如我们创建一个名为membername的Cookie来包含访问者的信息:
(SetCookie'membername',joe',()+86400,,www.'time'''php.net',)l;
这些就是在PHP中怎样进行Cookie的设置,下[6]面再看看怎样删除Cookie。要删除一个已经存在的Cookie,办法很简单:调用只带有name参数的Set那么名为name的Cookie将被从客户机上删Cookie,掉。
(;SetCookie"mycookie")
这时的变量!mycookie已删掉,不能再使用。
2用PHP开发一个基于Cookie的例程
该例程可以在用户没有登录之前,显示用户的姓名,并问好。以下是部分程序代码:
<?phpreguire'connect.inc';if(!cookieon)!{IsSet!HTTPCOOKIEVARS"userid"])(([)if{resuItl=@mysgIseIectdb'userIoginfo')(;!(!resuItl)if{strsgI='seIect!fromIoginfowhereuserid="'.!user!id.'"';…if(!usertimes!='l'){echo"您上一次访问本站是:;"}echo!userIasttime;(curtime=date'Y-m-dH:s')i:;!…}(;eIseSetCookie"userid")}
SetCookie函数会跟着标识Header送出一段小信息字符串到浏览器。实际发送的HTTP标题是这样的: