会话技术之cookie

HTTP协议具有无连接和无状态的特点  在提高效率的同时会让服务器与浏览器变得冰冷 即使以很快的速度连续打开两次网站  服务器依旧无法识别这是同一个客户  所以就需要使用会话技术使浏览器与服务器相识 以及 可以让浏览器访问的不同脚本之间数据共享 

会话技术 包括 cookie技术和session技术

cookie技术的实现 : 

当浏览器第一次访问一个网站时 请求头中没有cookie信息  

会话技术之cookie_第1张图片

 当服务器收到请求做出响应时 会在响应头增加一个协议 set-cookie ="" 

然后浏览器接受到响应以及解析其中的set-cookie协议 得到cookie数据  并将cookie数据保存到浏览器

下次访问该服务器其他脚本的时候(cookie数据还未失效)  就会把cooie数据放在请求头中 传给脚本 脚本就可以识别 这是同一个用户

本质上就是利用浏览器作为踏板 实现不同脚本之间的数据共享实现浏览器与服务器之间是有连接的

通过php代码设置服务器返回的cookie数据

在第一次执行这个代码的时候打开调试台  会发现只有响应头中有相应的cookie数据 请求头中不存在cookie数据

 当不关闭浏览器 访问其他脚本或再次访问自身脚本时 就会发现请求头中会提交cookie数据 

因为打开的这个脚本中没有设置cookie 所有只会在请求头中包含cookie信息  而不会在 响应头中包含信息 

cookie存复杂数据 

//cookie 存复杂数据 由于setCookie的第二个参数只能是字符传 所以打算存数组信息时 需要在取名时取成数组形式
setcookie('name[]','ada');
setcookie('name[]','bom');
setcookie('name[]','cash');
//这样的话就可以存入数数组形式的数据 在$_COOKIE中 name对应的不是一个值 而是一个数组

 cookie 高级应用  可以控制cookie的生命周期以及访问有效性

会话技术之cookie_第2张图片

在控制台查看从cookie时  后面的Expires/Max-age 就是他们的生命周期 默认 session 一次会话 我们可以人为设置一个生命周期

 

setcookie('seven day','20190706' time()+7*24*3600);//第三个参数 类型为时间戳 其意义是cookie一直可以持续有意义的时间
//当天设定是 从当前的时间开始抑制持续到7天后 

 执行代码后可以看到 Expries/Max-age 的值是 7.0 day 

现在查看浏览器的cookie文件

重启浏览器后查看cookie文件 

会话技术之cookie_第3张图片

可以看出我们改变了 sevenday 这个cookie的生命周期 我们可以利用这个特性 来删除cookie数据 只需要把第三个参数改为  1 time()-1 等已经过去的时间戳即可 

控制台中有个path属性 当前访问路径  cookie有一个访问路径特性 就是默认 脚本的cookie数据只能同级以及下级

会话技术之cookie_第4张图片

但是在实际开发中 一个网站通常cookie是共享的 所以我们需要把该访问路径设置成根目录

setcookie('anywhere','anywhere',0,"/");//访问路径设置到根目后 文件夹外的脚本 也可以接受到cookie数据

在实际开发中 还有一个cookie跨域共享的问题  cookie默认只能当前网站访问  (域名限定 ) 但实际上 比如在百度页面登陆了信息  那么在百度网盘也会自动登陆 我们依旧可以通过设置来实现跨域共享

setcookie('goout','go out',0,'/','.com');//这意味着 只要是.com结尾的域名都会得到这个cookie 
setcookie('goout','go out',0,'/','baidu.com');
//这意味着 只要是baidu.com结尾的域名都会得到这个cookie 
//同时控制台中对应cookie 的domin属性 会变成参数设置的字符串  .com  baidu.com 

 

你可能感兴趣的:(PHP学习)