HTTP是一个属于应用层的面向对象的协议,HTTP 协议一共有五大特点:
- 支持客户端/服务器模式
- 简单快速
- 灵活
- 无连接
- 无状态
无连接、无状态指什么
通过Cookies,服务器就可以清楚的知道请求2和请求1来自同一个客户端。
无连接
限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
无状态
每个请求都是独立的,协议对于事务处理没有记忆能力,服务器根据请求返回发送数据,但是发送完不会记录任何信息。
缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP 协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求“点到为止”不会造成不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。
解决方案
1、Cookie
2、Session
服务器先检查客户端的请求里是否已包含了一个session标识即sid, 如果已包含一个sid服务器则按照sid把这个session检索出来使用;
如果客户端请求不包含sid,则为此客户端创建一个session并且生成一个与此session相关联的sid,sid的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sid将被在本次响应中通过Cookie返回给客户端保存。
2.1 Session的实现方式
使用Cookie来实现
服务器给每个Session分配一个唯一sid,并通过Cookie发送给客户端。 当客户端发起新的请求的时候,将在Cookie头中携带这个sid,这样服务器能够找到这个客户端对应的Session。
使用URL回写来实现
URL回写是指服务器在发送给浏览器页面的所有链接中都携带sid的参数,这样客户端点击任何一个链接都会把sid带给服务器。如果直接在浏览器输入服务端资源的url来请求该资源,那么session是匹配不到的。
Tomcat对Session的实现,是一开始同时使用Cookie和URL回写机制,如果发现客户端支持Cookie,就继续使用Cookie,停止使用URL回写。如果发现Cookie被禁用,就一直使用URL回写。jsp开发处理到Session的时候,对页面中的链接记得使用response.encodeURL() 。
Session和Cookie区别
-
Cookie将状态保存在客户端,Session将状态保存在服务器端;
-
Cookies是服务器在本地机器上存储的小段文本,并随每一个请求发送至同一个服务器。
-
服务器用HTTP头向客户端发送cookies,客户终端解析并将它们保存为一个本地文件,它会自动将同一服务器的任何请求上这些cookies。
-
Session是针对每一个用户的,变量的值保存在服务器上,用一个sd来区分是哪个用户session变量,这个值是通过用户浏览器在访问的时候返回给服务器,当客户端禁用cookie时,这个值也可能设置为由get来返回给服务器。
-
就安全性来说:当你访问一个使用session 的站点,同时在自己机子上建立一个cookie,建议在服务器端的session机制更安全些。因为它不会任意读取客户存储的信息。