下午实在太困了,中期检查刚过,还得准备面试,算了,再拖几天吧。
继续看文档。
做设计太难了鸭
Cookie长得又好看,发音又好听,翻译还是点心,i了i了
先说Http是无状态协议,他只负责把数据带到了,链接就关闭了。Http不会对用户产生记忆。
而好的用户体验应该是登录一次之后,下次访问这个网站,自动登上了自己的账号,不需要重复的登录操作,这就要用到cookie。

Cookie的过程:
1.客户端向服务端第一次发送请求,没有cookie
2.服务端如果希望让客户端保存登录信息的话,会在响应头中添加setcookie方法
3.cookie保存在客户端

4.客户端再次发送请求,带上cookie
5.服务端验证cookie内容,返回登录后的页面

Cookie方法:
根据惯例,cookie应该有增删改查四种功能。但是很遗憾,setcookie一个人就能包揽所有功能。

增就是setcookie方法,这个方法里面有几个参数,name, value, expire, path, domain
而最经常使用的就是setcookie(name,value,expire);即name:value的键值对以及过期时间
过期时间如果不填写也会在关闭浏览器后消失,填0或负数也一样,可以取一个月即

setcookie('username','admin',time()+3600*24*30);
//或者更推荐
$expire = ...;
setcookie('username','admin',$expire);

删除cookie就是改cookie,还是调用setcookie方法,只需要把expire设置成负数即可,也就是设置到期时间为过去的某一时间点。刚刚又写了一个判断cookie为空和cookie不存在的语句,发现过期已经是等于不存在了,F12里面也找不到影子了,所以设置时间点足以抹杀cookie,不放心的话再把value设置为"";

setcookie('username','good',time()-3600);//清空了
if(!isset(cookie['username'])){
  echo "我cookie已死";
}elseif (cookie['username']==null) {
  // code...
  echo "我还活着,只是过期了而已";
}

cookie die

cookie查询:
$_COOKIE['name']

cookie的存储方式是字符串,也就意味着如果要储存数组在cookie中就需要用到字符串分割。

cookie的安全性:
安全性包括变量安全性还有通常所指的安全性,变量方面,不同域之间的cookie不能互相流通,但是cookie始终是把信息公开保存在本地的,所以最好不存放敏感信息。大型网站是不会把用户名密码明文暴露的,所以写程序的时候就要注意加密了。
cookie不安全

cookie的最后两个参数:
domain就是cookie的namespace,是指向互联网中的位置。比如百度就只能用百度规定域名中的cookie,不能用blog.inayama.tech的域名。
而path是cookie在服务器本地的存储地址,而且path长的cookie和path短的cookie都存在的情况下优先选择path较长的。


更新,之前判断cookie为空的cookie['username']是不能这么写的,但是

if(!isset($_COOKIE['username'])){
  echo "我cookie已死";

换成变量$_COOKIE的检测结果和cookie完全一样,于是想输出看一下这个数组是什么,
发现cookie['username']=c
人傻了,留个坑