陈力:传智播客古代 珍宝币 泡泡龙游戏开发第44讲:PHP程序设计中的COOKIE
服务器在客户端保存用户的信息,就要用到cookie。Cookie在客户机(浏览器)就是一个字符串,可以通过setcookie("name","张三",time()+3600)进行创建,$_COOKIE[‘cookie的名字’]读取,本章结合贵阳网站建设实践进行介绍。
什么是会话? 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
会话过程中要解决的一些问题? 每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,服务器要想办法为每个用户保存这些数据。例如:多个用户点击超链接通过一个php各自购买了一个商品,服务器应该想办法把每一个用户购买的商品保存在各自的地方,以便于这些用户点结帐php时,结帐php可以得到用户各自购买的商品为用户结帐。 提问:这些数据保存在什么地方?
大家在访问某个网站的时候,是否能看到提示你上次登录网站的时间,而且要注意的是不同用户上次登录的时间肯定是不一样的,这是怎么实现的?
一、cookie技术
Cookie(小甜饼)是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。
服务器在客户端保存用户的信息,比如登录名,密码等..就是cookie,这些信息就像是小甜饼一样,数据量并不大,服务器端在需要的时候可以从客户端读取,保存在客户端的浏览器缓存目录下,可以通过右边的图来理解。
二、cookie可以用来做什么
1: 保存上次登录时间等信息。
2: 保存用户名、密码,在一定时间不用重新登录。
3: 记录用户访问网站的喜好(比如有无背景音乐、网页的背景色是什么。
4: 网站的个性化,比如定制网站的服务,内容。
三、cookie基本使用
1: Cookie在客户机(浏览器)就是一个字符串,其形式如下:
name2 zhansan localhost/cookie/ 1024414383692830177007251247529630176999*
2: 如何创建一个Cookie(在服务端创建的)
bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure]]]]] )
3: 如何读取cookie(从客户端读到服务器)
$_COOKIE[‘cookie的名字’];
4: 如何删除一个cookie值
要删除 cookie 需要确保它的失效期是在过去,才能触发浏览器的删除机制。
###### cookie信息保存在客户端的 ~登录用户名/Cookies 隐藏目录下。
######$_COOKIE[] 是php的一个预定义超全局数组.
******cookie1.php*****
<?php
//演示如何创建cookie
setcookie("name","张三",time()+3600);
setcookie(“name2”,”李四”,time()+3600);
echo 'cookie创建成功!';
?>
*****cookie2.php******
<?php
//显示所有cookie,通过自动全局数组来搞定
print_r($_COOKIE);
//如何取出某个cookie
$my_name=$_COOKIE['name'];
echo '名字是='.$my_name;
?>
****cookie4.php(如何删除cookie值)*******************
<?php
//演示如何创建cookie。
setcookie("name","",time()-3600);
//也可以这样删除,只要保证cookie时间过期即可。
setcookie(“name”);
echo 'cookie删除成功!';
?>
删除cookie信息:指定删除某个 key<==>value,删除所有的 key<===>value。
<?php
//指定删除某一个 key<==>val
//如果要删除某个key 只需要把 time()-秒数
setCookie("name","",time()-200);
echo "删除name key成功!";
//如何删除所有的
foreach($_COOKIE as $key=>$val){
setCookie($key,"",time()-100);
}
echo "删除所有cookie成功!";
?>
如果你删除的 cookie的 key<==>value 没有删除完,则这个cookie在客户端保留,如果你把这个网站的所有cookie都删除,则浏览器会把 cookie文件删除.
显示用户上次访问时间
*****cookie3.php(获取上一次访问网页时间,如果是第一次访问则给出提示.)****
<?php
//获取上次登录的时间
$lvt=$_COOKIE['last_visit_time'];
if($lvt==null){
//把这次访问的时间写入cookie,并保存到客户端浏览器缓存中
date_default_timezone_set('PRC');
setcookie('last_visit_time',date("Y-m-d H:i:s"));
echo '您是第一次访问本站.';
}else{
//更新最新时间
date_default_timezone_set('PRC');
setcookie('last_visit_time',date("Y-m-d H:i:s"));
echo '您上次登陆实际是:'.$lvt;
}
?>
应用:
<?php
//演示如何创建cookie信息
//把用户名和密码保存到客户端的cookie
//这个函数用于保存cookie
//第一个参数表示cookie一个key 第二个参数表示 val,第三个参数表示cookie值。
//客户端保存时间,按秒计算
// key <-->value
// key <--->value
//.....
setCookie("name","zhansan",time()+3600);
setCookie("password","12345",time()+30);
setCookie("address","北京",time()+300);
echo "保存成功!";
?>
对代码说明:
1)当浏览器访问 cookie1.php页面的时候,我们的服务器就会以Set-Cookie: name=shunping; expires=Wed, 21-Sep-2011 07:53:25 GMT 回送http响应,当浏览器获取到该信息后,就会保存该cookie 的新到。本机的 c:/xxx/admin/cookies文件。
2)如果我们如果没有该时间(第三个参数)
cookie不会保存到客户端,当浏览器的会话结束,我们的cookie就失效。
3)cookie能保存什么样的信息,就是字符串。
4)客户端可以保存多个 key<==>value 对。
5)cookie也可以保存中,默认将会对中文进行 urlencode进行编码。
6)cookie 可以有多个 键<==>值 对,可以给不同的键值 ,指定不同的有效时间。
如何从客户端获取保存的cookie信息
代码:
<?php
//获取cookie信息
echo "<pre>";
print_r($_COOKIE);
echo "</pre>";
//获取指定的key对应的值
$name=$_COOKIE['name'];
echo "name=".$name;
?>
对代码说明:如果cookie有效时间到,则不能取出。客户端cookie信息是怎样传递给服务器通过 http协议的。Cookie: name=shunping。这个机制是http协议 规定。
五、cookie 细节
一个Cookie只能标识一种字符串信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。
一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。
如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用expire,并给出一个以秒为单位的时间。要删除 cookie 需要确保它的失效期是在过去,才能触发浏览器的删除机制。
实际运用:如果用户是第一次访问该页面,则提示,你是第一次访问该页面,如果第二次后,则显示上次登陆时间。
在雇员管理系统中增加:登录empManage.php页面时候,显示该用户登录的上一次时间。
在使用显示上次登陆时间的方法的时候,会提示一个时区错误:
需要我们设置时区:在php文件中设置:
date_default_timezone_set("Asia/Chongqing");
在php.ini文件中:date.timezone = Asia/Chongqing
完成新的功能:打开登录页面的时候,自动填写该用户的用户名和密码。
loginProcess.php
//3. 获取用户是否选中了保存id
if(empty($_POST['keep'])){
if(!empty($_COOKIE['id'])){
setcookie("id",$id,time()-100);
}
}else{
setcookie("id",$id,time()+7*2*24*3600);
}
在common.php添加一个函数
function getCookieVal($key){
if(empty($_COOKIE[$key])){
return "";
}else{
return $_COOKIE[$key];
}
}
在login.php中添加了
value="<?php echo getCookieVal("id"); ?>"
【推荐阅读】
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第44讲:PHP程序设计中的COOKIE