PHP用户指南-cookies部分


Posted in PHP onOctober 09, 2006

PHP用户指南-cookies部分

在这课教程我们将学习怎样利用 PHP 处理cookies,我将试着使事情尽可能简单地去解释cookies的一些实际应用。

什么是cookies及作用?  
cookies是由web服务器产生的并且存在客户端的一些信息。它嵌在html信息中,由服务器端指定,在客户端及服务器端间传递信息
。它通常用来:用户网页个性化,计数器,储存被浏览站点的信息等。

cookies和php
在 PHP中用cookies是相当容易的。可以使用setcookie函数设置一个cookie。cookie是 HTTP标头的一部分, 因此设置cookie功能必须在任何内容送到浏览器之前。这种限制与header()函数一样。任何从客户端传来的cookie将自动地转化成一个PHP变量。PHP取得信息头并分析, 提取cookie名并变成变量。因此,如果你设置cookie如setcookie("mycookie","wang");php将自动产生一个名为$mycookie,值为"wang"的变量.

先让我们复习一下setcookie函数语法:
setcookie(string CookieName, string CookieValue, int CookieExpireTime, path, domain, int secure);
PATH:表示web服务器上的目录,默认为被调用页面所在目录
DOMAIN:cookie可以使用的域名,默认为被调用页面的域名。这个域名必须包含两个".",所以如果你指定你的顶级域名,你必须用".mydomain.com"
SECURE:如果设为"1",表示cookie只能被用户的浏览器认为是安全的服务器所记住

应用:
对于一个需要注册的站点,将自动识别用户的身份,并发送给它信息,如果是陌生人,将告诉他请先注册。我们按下面给出的信息创建一个小型数 据库:名字(first name),姓(last name),email地址(email address),计数器(visit counter).
按下面步骤建表:

mysql> create database users;  
Query OK, 1 row affected (0.06 sec)  

mysql> use users;  
Database changed  

mysql> create table info (FirstName varchar(20), LastName varchar(40),  
email varchar(40), count varchar(3));  
Query OK, 0 rows affected (0.05 sec)

好,现在有了符合要求的表,我们可以建一个php页面对照数据库检查cookies.

########################index.php##################################
<? if (isset($Example)) { //Begin instructions for existing Cookie  
$info = explode("&", $Example);  
$FirstName=$info[0];  
$LastName=$info[1];  
$email=$info[2];  
$count=$info[3];  
$count++;  

$CookieString=$FirstName.'&'.$LastName.'&'.$email.'&'.$count;  
SetCookie ("Example",$CookieString, time()+3600); //设一新的cookie  

echo" <html>  
<title>wang example</title>  
</head>  
<body>  
<p>Hello $FirstName $LastName, this is your visit number: $count</p>  
<p>Your email address is: $email</p>  
<body>  
<html>";  

mysql_connect() or die ("Problem connecting to DataBase"); //update DB  
$query = "update info set count=$count where FirstName='$FirstName' and  
LastName='$LastName' and email='$email'";  
$result = mysql_db_query("users", $query) or die ("Problems .... ");  

} //End Existing cookie instructions  

else { //Begin inctructions for no Cookie  
echo "<html>  
<head>  
<Title>Rafi's Cookie example</title>  
</head>  
<body>  
<a href="reg.php">Click Here for Site Registration</a>  
</body>  
</html>";  
} //End No Cookie instructions  
?>

注意:如果你用的是一个远程mysql服务器或unix服务器,你应用下面语句
mysql_connect ("server","username","password") or die ("Problem connecting to DataBase");  

我们想检查是否一个被指定名字的cookie在html头部分传送,记住,php能转换可识别的cookie为相应的变量,所以我们能检查一个名为"Example" 的变量:
<? if (isset($Example)) { //Begin instructions for existing Cookie  
...  
} else {  
...  
}
如果这个cookie存在,我们将计数器加一,并打印用户信息,如果这个cookie不存在,我们建议用户先注册
如果cookie存在,我们执行下面步骤:
<? if (isset($Example)) { //Begin instructions for existing Cookie  
$info = explode("&", $Example); //split the string to variables  
$FirstName=$info[0];  
$LastName=$info[1];  
$email=$info[2];  
$count=$info[3];  
$count++;  

$CookieString=$FirstName.'&'.$LastName.'&'.$email.'&'.$count;  
SetCookie ("Example",$CookieString, time()+3600); //setting a new cookie  

echo" <html>  
<title>wang example</title>  
</head>  
<body>  
<p>Hello $FirstName $LastName, this is your visit number: $count</p>  
<p>Your email address is: $email</p>  
<body>  
<html>";  

mysql_connect() or die ("Problem connecting to DataBase"); //update DB  
$query = "update info set count=$count where FirstName='$FirstName' and  
LastName='$LastName' and email='$email'";  
$result = mysql_db_query("users", $query) or die ("Problems .... ");  

} //End Existing cookie instructions
上面的程序有3个主要部分:首先取得cookie值,用explode函数分成不同的变量,增加计数器,并设一新cookie.接着用html语句输出用户信息。最后,用新的计数器值更新数据库。
如果这个cookie不存,下面的程序将被执行:

else { //Begin inctructions for no Cookie  
echo "<html>  
<head>  
<Title>Rafi's Cookie example</title>  
</head>  
<body>  
<a href="reg.php">Click Here for Site Registration</a>  
</body>  
</html>";  
} //End No Cookie instructions  

下面reg.php简单列出到注册页面的链接
#############################reg.php#############################

   
<html>  
<head><title>Registering the Site</title>  
</head>  

<body bgcolor=#ffffff>  
<h1>Registering the site</h1>  

<form method="post" action="reg1.php">  
<table width=90% align=center>  
<tr><td>User Name:</td><td><input type=text name='FirstName' size=20  
maxlength=20></td></tr>  
<tr><td>Last Name:</td><td><input type=text name='LastName' size=40  
maxlength=40></td></tr>  
<tr><td>email addrress:</td><td><input type=text name='email' size=40  
maxlength=40></td></tr>  
<tr><td></td><td><input type=submit value="Click to Register"></td></tr>  
</table>  
</form>  
</body>  
</html>  

在所有的信息被提交后调用另一php文件分析这些信息
##############################reg1.php####################################
<?  
if ($FirstName and $LastName and $email)  
{  
mysql_connect() or die ("Problem connecting to DataBase");  
$query="select * from info where FirstName='$FirstName' and  
LastName='$LastName' and email='$email'";  
$result = mysql_db_query("users", $query);  

$r=mysql_fetch_array($result);  
$count=$r["count"];  

if (isset($count)) {  
$CookieString=$FirstName.'&'.$LastName.'&'.$email.'&'.$count;  
SetCookie ("Example",$CookieString, time()+3600);  
echo "<p>user $FirstName $LastName already exists. Using the existing  
info.</p>";  
echo "<p><a href="index.php">Back to Main Page</a>";  
} else {  
$count = '1';  
$query = "insert into info values  
('$FirstName','$LastName','$email','$count')";  
$result = mysql_db_query("users", $query);  
$CookieString=$FirstName.'&'.$LastName.'&'.$email.'&'.$count;  
SetCookie ("Example",$CookieString, time()+3600);  
echo "Thank you for registering.<br>";  
}  

} else { echo "Sorry, some information is missing. Please go back and add all  
the information"; }  
?>  
首先检查所有的信息是否按要求填写,如果没有,返回重新输入
<?  
if ($FirstName and $LastName and $email)  
{  
...  
} else { echo "Sorry, some information is missing. Please go back and add all  
the information"; }  
?>
如果所有信息填好,将执行下面:

mysql_connect() or die ("Problem connecting to DataBase");  
$query="select * from info where FirstName='$FirstName' and  
LastName='$LastName' and email='$email'";  
$result = mysql_db_query("users", $query);  

$r=mysql_fetch_array($result);  
$count=$r["count"];  

if (isset($count)) {  
$count++;  
$CookieString=$FirstName.'&'.$LastName.'&'.$email.'&'.$count;  
SetCookie ("Example",$CookieString, time()+3600);  
echo "<p>user $FirstName $LastName already exists. Using the existing  
info.</p>";  
echo "<p><a href="index.php">Back to Main Page</a>";  
} else {  
$count = '1'; //new visitor - set counter to 1.  
$query = "insert into info values  
('$FirstName','$LastName','$email','$count')";  
$result = mysql_db_query("users", $query);  
$CookieString=$FirstName.'&'.$LastName.'&'.$email.'&'.$count;  
SetCookie ("Example",$CookieString, time()+3600);  
echo "Thank you for registering.<br>";  
这段程序做了几件工作:它检查数据库是否有这样一个用户(如果没有,也就是说,这个cookie已被删除),如果有,它指定旧的信息,并用当前的信息建一新的cookie,如果同一用户没有数据库登录,新建一数据库登录,并建一新的cookie.
首先,我们从数据库中取回用户登录详细资料
mysql_connect() or die ("Problem connecting to DataBase");  
$query="select * from info where FirstName='$FirstName' and  
LastName='$LastName' and email='$email'";  
$result = mysql_db_query("users", $query);  
$r=mysql_fetch_array($result);  
$count=$r["count"];

现在检查是否有一计数器为这用户,利用isset()函数

if (isset($count)) {  
...  
} else {  
...  
}  
计数器增加并新建一cookie
$count++; //increase counter  
$CookieString=$FirstName.'&'.$LastName.'&'.$email.'&'.$count;  
SetCookie ("Example",$CookieString, time()+3600);  
echo "<p>user $FirstName $LastName already exists. Using the existing info.</p>";  
echo "<p><a href="index.php">Back to Main Page</a>";
如果没有一用户计数器,在mysql中加一记录,并设一cookie
注意:在任何时候,setcookie放在输送任何资料到浏览器之前,否则得到错误信息

#####################################################
---advance翻译,有不恰之处,请qianjinok@china.com-------

PHP 相关文章推荐
PHP CLI模式下的多进程应用分析
Jun 03 PHP
php set_time_limit()函数的使用详解
Jun 05 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
Oct 15 PHP
Thinkphp中的curd应用实用要点
Jan 04 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
Mar 01 PHP
Laravel中Trait的用法实例详解
Mar 16 PHP
php通过smtp邮件验证登陆的方法
May 11 PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
Oct 17 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
Apr 10 PHP
php7 安装yar 生成docker镜像
May 09 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 13 PHP
PHP 存取 MySQL 数据库的一个例子
Oct 09 #PHP
如何跨站抓取别的站点的页面的补充
Oct 09 #PHP
截获网站title标签之家内容的例子
Oct 09 #PHP
怎样在PHP中通过ADO调用Asscess数据库和COM程序
Oct 09 #PHP
怎样在php中使用PDF文档功能
Oct 09 #PHP
在PHP中执行系统外部命令
Oct 09 #PHP
针对初学PHP者的疑难问答(1)
Oct 09 #PHP
You might like
PHP4引用文件语句的对比
2006/10/09 PHP
PHP PDO函数库详解
2010/04/27 PHP
PHP开发不能违背的安全规则 过滤用户输入
2011/05/01 PHP
php简单的留言板与回复功能具体实现
2014/02/19 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
js option删除代码集合
2008/11/12 Javascript
走出JavaScript初学困境—js初学
2008/12/29 Javascript
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
2010/04/29 Javascript
用JavaScript对JSON进行模式匹配(Part 1-设计)
2010/07/17 Javascript
jQuery之浮动窗口实现代码(两种方法)
2010/09/08 Javascript
javascript 设为首页与加入收藏兼容多浏览器代码
2011/01/11 Javascript
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
JS正则表达式完美实现身份证校验功能
2017/10/18 Javascript
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
关于layui 下拉列表的change事件详解
2019/09/20 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
python基础教程之元组操作使用详解
2014/03/25 Python
Python中if __name__ == '__main__'作用解析
2015/06/29 Python
python实现用户登陆邮件通知的方法
2015/07/09 Python
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
2016/12/30 HTML / CSS
公益活动邀请函
2014/02/05 职场文书
大二法英学生职业生涯规划范文
2014/02/27 职场文书
初三学习计划书范文
2014/04/30 职场文书
道德模范事迹材料
2014/12/20 职场文书
工程质检员岗位职责
2015/04/08 职场文书
幼儿园重阳节活动总结
2015/05/05 职场文书
工程主管竞聘书
2015/09/15 职场文书
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python