PHP如何读取COOKIES
2024年02月25日
查看浏览器的Cookies让我们来看看保存在浏览器中的内容。如果你用的是IE5,在windows目录下有一个cookies的目录,里面有很多文本文件,文件名都是类似于wudong 15seconds[1].txt这样的,这就是浏览器用来保存cookies值的。在以前的IE版本中,cookies的内容是可以察看的,但是现在内容已经被编码了。在浏览器之前得到一个Web页面,它会先看这个页面的域名,是否在cookie中存在,如果有比较配的,浏览器会先把匹配的cookie传送到服务器,然后才接受处理服务器传送过来的页面。先举个cookie
应用的例子:当我连接到Amazon.com时,浏览器在接受第一个页面之前把它之前设置的cookies的内容传送给Amazon。然后Amazon.com对传送过来的内容进行检查,看看在数据库中其中没有相关资料,在配合之后,在为我建立一个定制的页面传送到过来。
========================
cookies赋值
必须在服务器上在为Cookies属性之前传送任何内容给客户浏览器。要做到这一点,cookies的设置就必须放在<HEAD>标签内:
<?php
setcookie("CookieID",$USERID);
?>
<HTML>
<BODY>
</BODY>
</HTML>
setcookie函数共有六个参数,用逗号来分隔:
cookie的名称,是一个字符串,例如:"CookieID"。其间不允许有冒号,逗号和空格。这个参数是必须的,而其他的所有参数都是可选的。如果只有这一个参数被给出,那么这个cookie将被删除。cookie
的值,通常是一个字符串标记,例如:$USERID。也可以为它赋一个??来略过值的设置。
cookie失效的时间。如果被按下(或者被赋值为零),cookie将在这个对话期(session)结束后失效。这个参数可以是一个绝对的时间,用DD-Mon-YY HH:MM:SS来表示,比如:"24-Nov-99 08:26:00"。而更常用的是设置一个相对时间。这是通过time()函数或者mktime函数来实现的。比如time()+3600将使得cookie在一个小时后失效。
一个路径,用来匹配cookie的。当在一个服务器上有多个同名的cookie的设置,为避免混乱,就要用到这个参数了。使用"/"路径的和简洁这个参数的效果是一样的。要注意的是Netscape的cookie定义是把域名放在路径的前面的,而PHP则正好相反。
服务器的域名,也是用来匹配cookie的。要注意的是:在服务器的域名前必须放上一个点(.)。例如:".friendshipcenter.com"。因为除非有两个以上的点存在,否者这个参数是不能被接受的。
cookie的安全级别,是一个整数。1表示这个cookie只能通过“安全”0或省略则表示任何类型的网络都可以。
=======
Cookie和变量
当PHP脚本从客户端浏览器提取了一个cookie后,会自动的把它转换成一个变量。例如:一个名为CookieID的cookie将变成变量$CookieID。
Cookies的内容被报存在HTTP_COOKIE_VARS缓存中,你还可以通过这个缓存和cookie的名称来访问指定的cookie值:
print$HTTP_COOKIE_VARS[CookieID];
==============
记住每个用户
都过头来看看上面的submitform.php3文件,它的作用是将客户的姓名添加到数据库中,现在我想为它添加一些东西。我想为每个用户都分配一个唯一的用户标志,然后把这个标志放在Cookies中,这样每当用户访问我的网站的时候,通过cookie和其中的用户标志,我就能够
MySQL能够被设置成为每一个新的记录自动的分配一个数字,这个数字从1开始,以后每次自动加1。用一行SQL语句可以,你就轻松的为数据表添加这样的一个字段,我把它称为USERID:
ALTER TABLE dbname
ADD COLUMN
USERID INT(11)NOT NULL
PRIMARY KEY AUTO_INCRMENT;
对这个字段我们做了一些特殊的设置。首先,通过“INT(11)”定义它的类型为11位的整数;然后用“NOT NULL”关键字让该字段的值不能为NULL;再用“PRIMARY KEY”把它设置为索引字段,这样搜索起来就会更快;最后,“AUTO_INCRMENT”定义为自动增一的字段。
当把用户的姓名插入到数据库后,就应该在他们的浏览器上设置cookie了。接下来利用的就是刚才我们说到的USERID字段的值:
<?php
mysql_connect(localhost,用户名密码);
mysql_select_db(数据库名);
mysql_query("INSERT INTO表名(名字,姓氏)VALUES("$名字","$姓氏")");
setcookie("CookieID",
“/”);/*三年后cookie才会失效*/
?>
PHP函数mysql_insert_id()返回在最后一次执行了INSERT查询后,由AUTO_INCRMENT定义的字段的值。这样,只要你不清除浏览器的Cookies,网站就可以永远“记住”你了
==================
读取cookie
来我们写一个像Amazon.com那样的脚本。首先,PHP脚本会先检查客户浏览器是否发送了cookie过来,如果是这样的话,用户的姓名就会被显示出来。如果没有找到cookie的话,就显示一个表单,让客户登记他们的姓名,然后把他添加到数据库中,并在客户端浏览其中设置好cookie。
首先,先来显示cookie的内容:
<?php
print$CookieID;
?>
然后,就可以把名字显示出来了:
<?php
mysql_connect(localhost,username,password);
mysql_select_db(数据库名);
$selectresult=mysql_query("SELECT*FROM表名WHERE USERID="$CookieID"");
$row=mysql_fetch_array($selectresult);
echo"欢迎你的光临",$row[first_name],"!";
?>
就是这样的了。我在其中没有作判断,排列你自己来完成好了。