cookie和session
- cookie
-
- [什么是 cookie](#什么是 cookie)
- [Servlet 中使用 cookie相应的API](#Servlet 中使用 cookie相应的API)
- [Servlet 中使用 session 相应的 API](#Servlet 中使用 session 相应的 API)
- [代码示例: 实现用户登陆](#代码示例: 实现用户登陆)
- [Cookie 和 Session 的区别](#Cookie 和 Session 的区别)
- 总结
cookie
什么是 cookie
- cookie的数据从哪里来?
- 服务器返回给浏览器的
- cookie的数据长什么样?
- cookie 中是键值对结构的数据, 并且这里的键值对都是程序员自己定义的
- cookie的作用是什么?
- cookie就可以在浏览器这边存储一些 "临时性的数据"
- 其中最典型的一种使用方式, 就是用来存储 "身份标识" -- sessionID
- cookie 到哪里去?
- cookie的内容会在下次访问该网站的时候, 自动被带到HTTP请求中
- cookie 怎么存?
- 浏览器按照不同的"域名" 分别存储 cookie
- 域名和域名之间的cookie是不能干扰的
- cookie 存储在硬盘上的
- cookie存储往往会有一个超时时间
Servlet 中使用 cookie相应的API
使用示例
Servlet 中使用 session 相应的 API
代码示例: 实现用户登陆
login.html
IndexServlet
LoginServlet
Cookie 和 Session 的区别
- Cookie 是客户端的机制. Session 是服务器端的机制.
- Cookie 和 Session 经常会在一起配合使用. 但是不是必须配合.
- 完全可以用 Cookie 来保存一些数据在客户端. 这些数据不一定是用户身份信息, 也不一定是token / sessionId
- Session 中的 token / sessionId 也不需要非得通过 Cookie / Set-Cookie 传递.
总结
- cookie是客户端的机制, session是服务端的机制;
- 在第一次登录的时候, 用户输入账号和密码发送服务端, 服务器此时读取HTTP请求中的cookie中的字段, 发现此时的请求没有cookie字段, 服务器就会为这个新的用户创建新的session, 建立起sessionID和session对象的联系, 并将sessionID作为Set-cookie字段填充响应HTTP, 最后将HTTP返回给客户端;
- 客户端的游览器收到服务器的响应HTTP报文, 从中解析出来Set-cookie字段, 并将其内容保存在cookie文件中, 下次如果客户端再次访问该服务器, 浏览器就会将该域名中的cookie内容提取出来, 作为cookie字段的内容, 作为HTTP中header, 向服务器发送请求HTTP报文;
- 此时服务器收到请求HTTP, 从cookie字段中提取到sessionID, 这样就可以找到已有的session了, 就可以进行后续的操作了