1.Cookie概念
- 当用户使用浏览器首次访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息发送到服务器;
- 接着服务器端接收到客户端发送过来的http请求后,会发送一个http响应到客户端,其中包含Set-Cookie头部,自此,客户端再向服务器发送请求的时候,都会把相应的Cookie再次发回至服务器,服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头的Cookie得到客户端特有的信息,从而动态生成与该客户端相对应的内容;
![ce4250d51a430c7ca24a8917b8ac639e.png](https://i-blog.csdnimg.cn/blog_migrate/5dd0db2490fb695b91147a01a19df013.jpeg)
在客户端的第二次请求中包含的Cookie头部中,提供给了服务器端可以用来唯一标识客户端身份的信息。这时,服务器端也就可以判断客户端是否启用了cookies
在客户端的第二次请求中包含的Cookie头部中,提供给了服务器端可以用来唯一标识客户端身份的信息。这时,服务器端也就可以判断客户端是否启用了cookies,查看浏览器中的Cookie信息
![e240a11b5512c181d620da1c0811fa59.png](https://i-blog.csdnimg.cn/blog_migrate/a956b4fa29917f057c46d2991ca3cf63.jpeg)
2.为什么要使用Cookie
- Web应用程序是使用HTTP协议传输数据的,但是HTTP协议是无状态的协议,也就是说一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接;
- 这就意味着服务器无法从连接上跟踪会话,如果想要踪该会话,必须引入一种机制,Cookie就是这样的一种机制,它可以弥补HTTP协议无状态的不足,在Session出现之前基本上所有的网站都采用Cookie来跟踪会话;
3.Cookie管理机制
- Cookie具有不可跨域名性,根据Cookie规范,浏览器访问一个域名时只会携带此域名的Cookie,而不会携带其他域名的Cookie;
- Cookie在客户端是由浏览器来管理的,浏览器能够保证域名不跨域,从而保证用户的隐私安全,浏览器判断一个网站是否能操作另一个网站Cookie的依据是域名;
4.Cookie的属性介绍
name
:名称,Cookie一旦创建,名称便不可更改;value
:值,如果值为Unicode字符,需要为字符编码,如果值为二进制数据,则需要使用BASE64编码;maxAge
:Cookie失效的时间,单位秒,默认为-1。如果为正数则该Cookie在在超过maxAge秒之后失效。如果为负数则Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。secure
:Cookie是否仅被使用安全协议(HTTPS,SSL等)传输;path
:Cookie的使用路径,如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/”;String domain
:可以访问该Cookie的域名,如果设置为“.9xkd.com”,则所有以“9xkd.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”;
让浏览器禁用Cookie,这样当再次访问登录过的网页时需要重新登录,
![828992b8f877159547b6bc94c7ec3566.png](https://i-blog.csdnimg.cn/blog_migrate/2c920e7b91a28e976fcce71f323d1284.jpeg)
![7263ee781e767fce1b1f8d28d09f360d.png](https://i-blog.csdnimg.cn/blog_migrate/dc1ae7b363026a90ac575d536a982a4b.jpeg)
![07f9d056b809f458fd2b36fad511df8f.png](https://i-blog.csdnimg.cn/blog_migrate/e1490b85b915dbae03da346903cc06f8.jpeg)
5.Session概念
- Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力;
- Session技术则是服务端的解决方案,它是通过服务器来保持状态的,我们通常都会把Session翻译成会话,因此我们可以把客户端浏览器与服务器之间一系列交互的动作称为一个 Session;
6.使用Session
- 第一步是创建Session,Session是在服务器端程序运行的过程中创建的,不同语言实现的应用程序有不同创建Session的方法,在创建了Session的同时,服务器会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session;
- 然后可以调用Session相关的方法往Session中增加内容,这些内容只会保存在服务器中,发到客户端的只有Session id;
- 当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session,从而再次使用,这样用户的状态也就得以保持了;
7.Cookie与Session的区别
- cookie数据存放在客户的浏览器上,session数据存放在服务器上;
- cookie没有Session安全,别人可以分析存放在本地的Cookie并进行Cookie欺骗,考虑到安全应当使用session;
- session会在一定时间内保存在服务器上,当访问增多,会比较占用服务器的性能,考虑到减轻服务器性能方面,应当使用Cookie;
- 服务端的session的实现对客户端的cookie有依赖关系的,sessionid是写在cookie中的;
参考:https://www.9xkd.com/user/plan-view.html?id=9813237300
参考:https://my.oschina.net/xianggao/blog/395675?fromerr=GC9KVenE