思考一:为什么要禁用Cookie?
首先,cookie是服务端生成返回给客户端的,客户端会保存cookie到本地,甚至会永久保存。cookie有跨域(协议、域名、端口其中有一个不同就会产生跨域问题)问题。
cookie是和http捆绑在一起的,应该是当时科学家在设计http协议时就定义死了一个叫做cookie的字段用来保存会话信息。
既然http协议定义了一个cookie字段用来保存会话信息,那么我们就可以将会话信息保存到cookie里面,并返回给客户端。
cookie:加密(用户信息)
因为大家都遵循http协议,因此客户端也可以获取到cookie字段,然后客户端会保留cookie到本地(其实这个是客户端开发者决定的,保不保存都可以,但是浏览器都是默认保存的,因此在开发web项目时,要考虑是否应该使用cookie,目前有的浏览器默认禁用cookie)
cookie的优缺点:
不管什么技术都有着自身的局限性,我认为cookie没有什么严重的缺点,主要是看你的业务情况,是否适合使用cookie。有的说cookie有安全性问题,会被拦截转发。我觉得不算是cookie的问题,因为数据在网络上传输,肯定会有被拦截的情况。这又是另一个问题。
使用环境:
1、web项目还是java项目?
2、单体、集群还是分布式?
不管什么使用环境都可以使用cookie,技术都是为了解决业务问题。
个人经历:
我司有个项目和腾讯教育合作,有一个功能是嵌入腾讯平台的,因为腾讯禁用了cookie。我们就直接定义一个token放到请求头中,通过这个token来跟踪会话,其实和cookie的原理是一样的。
思考二:session会话机制
cookie是将会话信息保存到客户端,session则是将会话信息保存到服务端,返回会将sessionId保存在cookie里面返回给客户端。(如果禁用了cookie,其实也可以参考我上面的方式,单独创建一个请求头来保存,比如token)
服务器创建session会保存到内存中,那么在使用session时要注意使用的环境。在集群和分布式下,session是独立的,因此要做session共享。
session和cookie都有超时设置。因为session是保存在内存中的,还需要注意内容溢出问题,需要设置session超时,要注意清空过时的session,释放内存。