用cookies来跟踪识别用户


Posted in PHP onOctober 09, 2006

让我们来看看保存在浏览器中的内容。如果你用的是IE5,在windows目录下有一个cookies的目录,里面有很多文本文件,文件名都是类似于wudong@15seconds[1].txt这样的,这就是浏览器用来保存值的cookies了。在以前的IE版本中,cookies的内容是可以察看的,但现在内容已经被编码了。在浏览器得到一个Web页面之前,它会先看这个页面的域名,是否在cookie中存在,如果有相比配的,浏览器会先把匹配的cookie传送到服务器,然后才接受处理服务器传送过来的页面。


先举个cookies应用的例子:当我连接到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-YYHH:MM:SS来表示,比如:"24-Nov-9908:26:00"。而更常用的是设置一个相对时间。这是通过time()函数或者mktime函数来实现的。比如time()+3600将使得cookie在一个小时后失效。


一个路径,用来匹配cookie的。当在一个服务器上有多个同名的cookie的设置,为避免混淆,就要用到这个参数了。使用"/"路径的和省略这个参数的效果是一样的。要注意的是Netscape的cookie定义是把域名放在路径的前面的,而PHP则与之相反。


服务器的域名,也是用来匹配cookie的。要注意的是:在服务器的域名前必须放上一个点(.)。例如:".friendshipcenter.com"。因为除非有两个以上的点存在,否者这个参数是不能被接受的。


cookie的安全级,是一个整数。1表示这个cookie只能通过“安全”的网络来传送。0或者省略则表示任何类型的网络都可以。


Cookies和变量


当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:

ALTERTABLEdbname

ADDCOLUMN

USERIDINT(11)NOTNULL

PRIMARYKEYAUTO_INCREMENT;


对这个字段我们作了一些特别的设置。首先,通过“INT(11)”定义它的类型为11位的整数;然后用“NOTNULL”关键字让这个字段的值不能为NULL;再用“PRIMARYKEY”把它设置为索引字段,这样搜索起来就会更快;最后,“AUTO_INCREMENT”定义它为自动增一的字段。


当把用户的姓名插入到数据库后,就应该在他们的浏览器上设置cookie了。这时利用的就是刚才我们谈到的USERID字段的值:


<?php

mysql_connect(localhost,username,password);

mysql_select_db(dbname);

mysql_query("INSERTINTOtablename(first_name,last_name)

VALUES('$first_name','$last_name')

");

setcookie("CookieID",

mysql_insert_id(),

time()+94608000,

"/");/*三年后cookie才会失效*/

?>


PHP函数mysql_insert_id()返回在最后一次执行了INSERT查询后,由AUTO_INCREMENT定义的字段的值。这样,只要你不清除掉浏览器的Cookies,网站就会永远“记住”你了


读取cookie


我们来写一个像Amazon.com所作的那样的脚本。首先,PHP脚本会先检查客户浏览器是否发送了cookie过来,如果是那样的话,用户的姓名就会被显示出来。如果没找到cookie的话,就显示一个表单,让客户登记他们的姓名,然后把他添加到数据库中,并在客户浏览其中设置好cookie。


首先,先来显示cookie的内容:

<?php

print$CookieID;

?>

然后,就可以把名字显示出来了:

<?php

mysql_connect(localhost,username,password);

mysql_select_db(dbname);

$selectresult=mysql_query("SELECT*FROMtablename

WHEREUSERID='$CookieID'

");

$row=mysql_fetch_array($selectresult);

echo"欢迎你的光临",$row[first_name],"!";

?>

就是这样的了。我在其中没有作判断,交给你自己来完成好了  

PHP 相关文章推荐
Windows2003 下 MySQL 数据库每天自动备份
Dec 21 PHP
PHP截取汉字乱码问题解决方法mb_substr函数的应用
Mar 30 PHP
PHP 数组和字符串互相转换实现方法
Mar 26 PHP
php下载文件源代码(强制任意文件格式下载)
May 09 PHP
php常用的url处理函数总结
Nov 19 PHP
PHP查询快递信息的方法
Mar 07 PHP
PHP创建/删除/复制文件夹、文件
May 03 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
Sep 30 PHP
php利用ob_start()清除输出和选择性输出的方法
Jan 18 PHP
php学习笔记之mb_strstr的基本使用
Feb 03 PHP
PHP集成环境XAMPP的安装与配置
Nov 13 PHP
PHP中上传文件打印错误错误类型分析
Apr 14 PHP
使用sockets:从新闻组中获取文章(一)
Oct 09 #PHP
使用sockets:从新闻组中获取文章(三)
Oct 09 #PHP
PHP+MYSQL的文章管理系统(二)
Oct 09 #PHP
使用sockets:从新闻组中获取文章(二)
Oct 09 #PHP
通过ODBC连接的SQL SERVER实例
Oct 09 #PHP
如何对PHP程序中的常见漏洞进行攻击(下)
Oct 09 #PHP
模拟OICQ的实现思路和核心程序(三)
Oct 09 #PHP
You might like
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
2012/09/19 PHP
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
2019/03/18 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
详解AngularJS中的表格使用
2015/06/16 Javascript
JavaScript实现点击按钮字体放大、缩小
2016/02/29 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
利用Angular.js编写公共提示模块的方法教程
2017/05/28 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
2017/07/21 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
2019/01/30 Javascript
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
实现一个 Vue 吸顶锚点组件方法
2019/07/10 Javascript
JavaScript实现答题评分功能页面
2020/06/24 Javascript
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
Python牛刀小试密码爆破
2011/02/03 Python
python使用PyFetion来发送短信的例子
2014/04/22 Python
Python模仿POST提交HTTP数据及使用Cookie值的方法
2014/11/10 Python
在Python中使用mongoengine操作MongoDB教程
2015/04/24 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
利用matplotlib+numpy绘制多种绘图的方法实例
2017/05/03 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
Tensorflow实现卷积神经网络的详细代码
2018/05/24 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
应聘文员自荐信范文
2014/03/11 职场文书
幼儿园区域活动总结
2014/05/08 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
小学教师节活动总结
2015/03/20 职场文书
辛亥革命观后感
2015/06/02 职场文书
导游词创作书写原则以及开场白技巧怎么学?
2019/09/25 职场文书
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技
element tree树形组件回显数据问题解决
2022/08/14 Javascript