cookie和session后是会话技术能够存储交互中的信息
1.存储的位置不同.cookie存储在客户端.每次访问服务器都会带着当前域名下的cookie,
而session存储在服务器端 占用服务器资源
2.存储的限制不同.浏览器对cookie有个数限制,一般单个域名下最多有50个,每个cookie的最大值为4k
session则没有限制
3.安全性方面.cookie的数据存储在客户端容易被编辑和伪造所以相对来说不是特别安全
4.请求速度方面.因为cookie每次都会传递给服务器,所以如果写入的cookie数据较多就会导致报文体积的增大,影响请求的速度
而session是通过sessionid来识别的所以影响不大
5.生命周期方面.cookie的失效是即时的
session的失效是有一定概率触发的 PHP默认概率为1/1000 生命周期为24分钟
深入回答
cookie和session都是会话技术但二者实现的原理不同
一 . 原理不同
cookie实现会话的原理是每次都会将cookie值存放在HTTP请求报文的请求头中,服务器可以接受报文中的参数 如:id和用户名
session实现会话的原理是, 客户端在请求服务器的时候,检测请求中是否存在对应的cookie如果存在就直接进行读取和写入数据
如果不存在就生成一个随机的字符串, 并生成响应的文件进行session数据的读写, 最后再将随机生成的字符串写入到客户端的cookie中
二. 二者的联系
session的现实默认是依赖cookie的, 因为sessionid默认储存在cookie中. 但是如果客户端禁用了cookie, session依然是可以使用的
客户端只需要将正确的session id传递给服务器 即可
比如url参数, QQ的会员中心
三. 安全性问题
session和cookie都存在一定的问题因为二者都是基于HTTP请求的 HTTP请求一但被截获就会造成数据的丢失和一定程序的泄露,
建议服务器配置HTTPS证书 这样能有效的防止数据的丢失和泄露,并且对cookie的数据进行加密处理,不要明文传输
四. session的跨服务器的问题(session共享)
PHP语言默认存储session的位置是tmp目录下,在服务器集群中就会出现session共享的问题 . 每个用户的session会存储在不同的服务器下,
就会导致下次登录时,可能得不到自己的session信息,
此时就可以将session储存在一台单独的服务器下,用MySQL或者redis进行保存, 每台服务器都到该台服务器下进行数据的存取和写入即可.