网页之间的交互是通过Http协议传输数据的,而Http协议就是无状态协议,一旦数据提交完后,浏览器和服务器的链接就会关闭,再次交互的时候需要重新建立连接。这样服务器无法确认用户信息,于是就有了Cookie,Cookie就是通行证,访问的时候带上Cookie,这样服务器就可以从通行证上确认用户的信息。
Cookie的流程:浏览器访问服务器,如果服务器需要记录该用户的状态,就会使用response向浏览器发送一个Cookie,浏览器把Cookie保存起来,当浏览器再次访问服务器的时候,浏览器会把请求的网址连同Cookie一同交给服务器
Cookie具有不可跨域名性,不会把一个网站额cookie带到另一个网站。
Cookie的安全属性,如果不希望Cookie在非安全协议中传输,可以设置Cookie的secure属性为true,浏览器指挥在HTTPS和SSL等安全协议中传输该Cookie
Session是另一种记录浏览器状态的机制,不同的是Cookie保存在浏览器中,Session保存在服务器中,用户使用浏览器访问服务器的时候,服务器把用户的信息以某种的形式记录在服务器,这就是Session.Session比Cookie方便,Session可以解决Cookie解决不了的事Session可以保存对象,Cookie只能保存字符串
为什么服务器能够为不同的用户浏览器提供不同的Session?
HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一个用户,,于是服务器向浏览器发送了一个名为JESSIONID的Cookie,它的值是Session的Id值,Session依据Cookie来识别是否是同一个用户,该Cookie是服务器自动颁发给浏览器的,默认maxAge是-1也就是说仅当前浏览器使用,不将该Cookie存在硬盘中。浏览器禁用Cookie以后,将会使用URL重写的原理将Session的Id信息重写到URL地址中
Session和Cookie的区别
Cookie只能储存字符串,Session可以储存任何类型的数据。
Cookie储存在浏览器中,对客户端是可见的信息容易泄露,Session储存在服务器中,对客户端是透明的不存在敏感信息泄露问题。
Cookie保存在硬盘里,即使关闭浏览器,Cookie还是存在的。一旦设置有效期都是固定的,Session设置有效期后可以不断刷新页面,从而重新刷新Session的有效期。一旦关闭浏览器,该Session虽然没有从服务器中消亡,但也会失效。
Cookie保存在客户端,不占用服务器资源,Session保存在服务器,每个用户都会产生一个Session,如果并发访问很多的话。Session会消耗大量内存。