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应用技巧
Mar 27 PHP
php 获取select下拉列表框的值
May 08 PHP
php中$_REQUEST、$_POST、$_GET的区别和联系小结
Nov 23 PHP
php ci框架验证码实例分析
Jun 26 PHP
php模拟用户自动在qq空间发表文章的方法
Jan 07 PHP
php使用cookie保存登录用户名的方法
Jan 26 PHP
分析PHP中单双引号的误区和双引号小隐患
Jul 19 PHP
PHP+Apache+Mysql环境搭建教程
Aug 01 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
Dec 18 PHP
掌握PHP垃圾回收机制详解
Mar 13 PHP
PHP实现与java 通信的插件使用教程
Aug 11 PHP
php多进程中的阻塞与非阻塞操作实例分析
Mar 04 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
浅析PHP Socket技术
2013/08/02 PHP
php对二维数组按指定键值key排序示例代码
2013/11/26 PHP
PHP PDOStatement::errorCode讲解
2019/01/31 PHP
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
2011/05/28 Javascript
window.requestAnimationFrame是什么意思,怎么用
2013/01/13 Javascript
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
2014/10/17 Javascript
轻松创建nodejs服务器(4):路由
2014/12/18 NodeJs
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
用python实现的线程池实例代码
2018/01/06 Python
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
Python读写文件基础知识点
2019/06/10 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
2019/08/12 Python
Python使用type动态创建类操作示例
2020/02/29 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
2020/07/05 Python
canvas如何实现多张图片编辑的图片编辑器
2020/03/10 HTML / CSS
纬创Java面试题笔试题
2014/10/02 面试题
自我评价怎么写正确呢?
2013/12/02 职场文书
军训自我鉴定范文
2014/02/13 职场文书
热情服务标语
2014/10/07 职场文书
2014年会计主管工作总结
2014/12/20 职场文书
python绘制箱型图
2021/04/27 Python