Cookie和Session产生的原因:
web层常用http协议通信,但是http协议是“无状态“的。所以需要会话跟踪技术,而常用的会话跟踪技术就是cookie、session。
Cookie的理解:
- cookie的实现和管理是由浏览器完成的
各个语言对cookie都是通过发送http指令来间接实现的。
PHP通过setcookie($name,$value,$expire,$path,$domain,$secure,$httponly)来设置cookie
由于对cookie的操作本质是由浏览器来完成,所以在本页面设置后,下个页面PHP才能从客户机取出。
扩展:还有一种cookie是Flash创建的,浏览器管不上
- cookie数据的存储形式:
cookie是保存在浏览器的数据,数据存储形式有文件和内存中,决定形式的是各个浏览器的策略。比如IE是以文件形式保存,firefox是SQlite。
- cookie的作用:
会话跟踪
- cookie跨域问题:
使用单点登录,最简单的单点登陆是使用P3P协议,原理:
在atest域名的页面引入btest域名下文件,这个文件的目的是种下btest域名的cookie
实现:
步骤1 编辑 hosts文件,加入测试域名
127.0.0.1 www.atest.com
127.0.0.1 www.btest.com
步骤2 访问 www.atest.com 时,调用 btest.com 的页面,种下 Cookie:
< script src = "http://www.btest.com/t/get.php?id=10000"></script>
http://www.btest.com/t/get.php使用P3P种下本域名下的Cookie:
< ? php
header ( " P3P : CP = " CURa ADMa DEVa PSAO PSDO OUR BUS UNI PUR TNT DEW STA PRE COM .
COR " ! ) ;
setcookie ( " D3p " , s GET / id ] ] , time ( ) + 3600 , " / " , " . btest . com " ] ;
注意事项:
在Firefox、Chrome、IE11 浏览器下测试,即使不发送P3P头信息也能成功。
session的理解:
- session的实现:
cookie、或者URL重写
- session的数据存储形式
默认是以文件形式保存在服务器,当文件很多的时候,会影响读取文件速度。所以当session量大时候,可以考虑用数据库、redis等形式保存。
通过session.save_path在php.ini文件设置。通过session_set_save_handle()自定义session机制。
- session作用:
会话跟踪
cookie和session关系:
session通过PHPSESSIONID的cookie来和服务器保持联系,因此禁止使用cookie,session也就无法使用。
但是可以通过URL重写来实现传递PHPSESSIONID,来解决禁止使用cookie带来的影响。