区别
- cookie保存在客户端,session保存在服务器端,
- cookie目的可以
跟踪会话
,也可以保存用户喜好
或者保存用户名密码
- session用来
跟踪会话
1. 必备知识:
1.1 http 原理
HTTP是一个无状态的协议
。无状态
是指客户机(Web浏览器)
和服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后服务器返回响应(response)
,连接就被关闭了,在服务器端不保留连接的有关信息。
1.2 传输流程
- 地址解析
- 如用客户端浏览器请求这个页面:
http://localhost:8080/index.html
从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下: - 协议名:http
- 主机名: localhost
- 端口:8080
- 对象路径: index.html
- 在这一步,需要
域名系统DNS解析域名localhost.com
,得主机的IP地址。
- 如用客户端浏览器请求这个页面:
- 封装HTIP请求数据包
- 把以上部分结合本机自己的信息,封装成一个HTTP请求数据包
- 封装成TCP包并建立连接
- 封装成TCP包,建立TCP连接(TCP的三次握手)4客户机发送请求命
- 客户机发送请求命令
- 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可内容。
- 服务器响应
- 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MME信息包括服务器信息、实体信息和可能的内容。
- 服务器关闭TCP连接
- 服务器关闭TCP连接:一般情况下,一旦Web服务器向浏览器返回了请求数据,它就要关闭TCP连接,
- 如果浏览器或者服务器在其头信息加入了这行代码Connectionkeep-alve,TCP连接在发送后将仍然保持打开状态,
- 于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立所连接所需的时间,还节约了网络带宽。
http请求报文
2. Cookie
- 当我们登录网站勾选保存用户名和密码的时候,一般保存的都是cookie,将用户名和密码的cookie保存到硬盘中,这样再次登录的时候浏览器直接将cookie发送到服务端验证。
- 再比如用户喜欢的网页背景色,比如QQ空间的背景,这些信息也是可以通过cookie保存到客户端的,这样登录之后直接浏览器直接就可以拿到相应的偏好设置。
跟踪会话
,比如某些网站中网页有不同的访问权限,有只能登录的用户访问的网页或者用户级别不同不能访问的,但是http请求是无状态的
,每次访问服务端是不知道是否是登录用户,很自然的想到在http请求报文中加入登录标识
就可以了,这个登录标识就可以是cookie,这样的cookie服务端要保存有所有登录用户的cookie
,这样请求报文来了之后拿到登录标识cookie,在服务端进行比较就可以了。
3. Session
- session就是用来保存
会话的cookie
- http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息,那么要怎么才能实现网上商店中的购物车呢,
session就是一种保存上下文信息的机制
,它是针对每一个用户的,变量的值保存在服务器端,通过SessionID来区分不同的客户。
浏览器和Session之间的关系内幕
4. 提问:
如果客户端禁止 cookie能实现session 还能用吗?
答:
可以用,session只是依赖cookie存储sessionid
,如果cookie
被禁用了,可以使用url
中添加sessionid
的方式保证session 能正常使用。
5. 致谢
文章参考自:
- wuxinliulei:cookie和session的区别
- 尚硅谷JavaWeb课程