1. Cookie
- Cookie是直接存储在浏览器本地的一小串数据
- 使用document.cookie访问cookie
- 修改cookie时,只会修改其中提到的Cookie
- name=value必须被编码(encodeURIComponent)
- 一个Cookie最大为4Kb,每个网站最多有20+个左右的Cookie(具体取决于浏览器)
- Windows中的Chrome浏览器的Cookie存放位置
- C:\Users\用户名\AppData\Local\Google\Chrome\User data\Default\Cookie
- 使用SQLite数据库进行存储
2. Cookie的作用域
- domain和path标识定义了Cookie的作用域,即Cookie应该发送给哪些URL
- domain
- 标识指定了哪些主机可以接受Cookie
- 如果不指定,默认为当前文档的主机(不包含子域名);如果指定了domain,则一般包含子域名
- 例如:如果设置domain=520it.com,则Cookie也包含在子域名中(如bbs.520it.com)
- path
- 标识指定了主机下的哪些路径可以接受Cookie,子路径也会被匹配
- 例如:设置path=/docs,则以下地址都会匹配
- /docs
- /docs/one/
- /docs/one/img
3. 服务器getSession()内部的原理
- 检查客户端是否有发送一个叫做JSESSIONID的Cookie
- 如果没有
- 创建一个新的Session对象,并且这个Session对象会有一个id
- 这个Session对象会保留在服务器的内存中
- 在响应的时候,会添加一个Cookie(JSESSIONID=Session对象的id)给客户端
- 如果有
- 返回Id为JSESSIONID的Session对象
总结:
1. Cookie
- 数据存储在浏览器端
- 数据有大小和数量的限制
- 适合存储一些小型,不明感的数据
- 默认情况下,关闭浏览器后就会销毁
2. Session
- 数据存储在服务器端
- 数据没有大小和数量的限制
- 可以存储大型,敏感的数据(比如用户信息)
- 默认情况下,未使用30分钟后就会销毁