php中cookie和session

如何在不同的页面间共享数据呢?

  • 数据库:慢,PHP连接Apache,Apache连接数据库服务器
  • 包含文件:较慢,PHP连接Apache,不用二次通讯,在本服务器上读取对应的文件即可,受约于硬盘的转速
  • cookie:利用的也是文件,存的时候是数组的形式,拿出来也是可以直接使用的数组
  • session:利用的也是文件,存的时候是数组的形式,拿出来也是可以直接使用的数组
  • 内存:最快,关机消失,可以从数据库取出常用数据至内存,缓存技术的一种

cookie与session是相互补充的,session运用了部分cookie技术

本文主要讲述cookie和session。先来两个故事~~~


有一天,A去沃尔玛(浏览器),前台美眉(服务器)说必须办会员卡才能购物。于是A提供了姓名、手机号、充值金额,美眉办理出了A三张卡,把信息(cookie数据)录入到卡里,并把卡快递到了A的家里(客户端),并告诉他必须回家带着卡里的信息,下次才能来购物,本次不能消费,而且三张卡的有效期都是一周(cookie的有效期),三张卡互不影响,
于是A回家了。第二天携带着三张卡里的数据(cookie数据)又来了,美眉读取了A带来的数据($_COOKIE),把数据($_COOKIE)报给其他每个店铺,A就可以到每家店铺消费。
一周后,家里的卡(客户端数据)失效了,A无法读出卡里的数据,无奈又去万达重新办了卡(重新设置cookie)。
新卡办完第二天,A的三张卡丢了,赶紧去万达挂失,美眉立即帮A把三张卡挂失了(设置cookie过期时间),并重新给A办理了三张临时卡(重新设置cookie,过期时间设置为0,会话后过期),下次来使用的时候一旦出了万达大门(关闭浏览器)就失效了。


B去了万达广场(浏览器),也是必须办会员卡才能购物,同样提供了姓名、手机号、充值金额,
前台美眉(服务器)留下了卡(session文件),只给了B一个卡号(PHPSESSID),
而且告诉B现在就可以购物,去店铺报上卡号(PHPSESSID)就OK了。
于是B兴冲冲的去了屈臣氏,报上了卡号(PHPSESSID),屈臣氏的工作人员检查了卡有没有过期(开启session,过期或不存在就重新办理),然后向前台美眉(服务器)发送了卡号(PHPSESSID),换来了B的信息($_SESSION)。
第二天,B又来了,说了卡号,但是前台美眉让他重新办卡,说是默认规定每次来购物都要重新办卡,也可以自己设置多久办一次卡(需设置php.ini里的session.cookie_lifetime
和session.gc_maxlifetime),于是B又办了一张卡,但是刚办完,B又不想要这张卡了,去找美眉注销,于是美眉就一通操作(

  • 清空内存里的session数组
  • 删除客户端的cookie文件
  • 删除服务器上的session文件
    )

两个故事最大的区别在于:

  • 1.卡在不在自己手里(数据是在客户端还是在服务器)
  • 2.能不能当场消费(第一次刷新页面能不能获取到数据)
  • 3.安全性(对泄露而言 数据在服务器比在客户端要安全一点点)

代码如下:

<?php 
// 首次刷新 cookie 本次设置不会生效
// cookie是在header头里传递的,header头必须在正文输出之前发送,所以不允许在cookie前有输出
setcookie('name','user1',time()+3,'/'); #3s后过期
setcookie('age','20',time()+36000,'/');
setcookie('sex','man',time()+36000,'/');

echo "<pre>";
print_r($_COOKIE);
echo "</pre>";
 ?>
 <?php 
setcookie('name','user1',time()-1,'/'); #设置立即过期
setcookie('age','20',0,'/');    #会话结束后(关闭浏览器)过期
setcookie('sex','man',0,'/');

echo "<pre>";
print_r($_COOKIE);
echo "</pre>";
 ?>
 <?php 
session_start();

$_SESSION['username'] = 'user11';
$_SESSION['userid'] = '1';

echo "<pre>";
print_r($_SESSION);
echo "</pre>";
 ?>
 <?php 
session_start();

// 清空内存里的 session数组
$_SESSION=array();

// 清除客户端
setcookie('PHPSESSID','',time()-1,'/');

// 清除服务器
session_destroy();

 ?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值