HTTP是一种不保存状态的协议,也就是无状态协议。Http自身不对请求和响应之间的通讯状态作出保存,也就是说在在HTTP这个级别,协议对于发送过的请求和响应都不作出保存。浏览器
事实上:因为一般一台服务器会服务于几万个甚至更多的客户(客户端),若是把全部的客户端信息都记录下来,那么会大大增长服务器的压力,HTTP协议是无状态的,也就意味着服务器无法记住某个客户发出的请求和作出的响应,这样的话客户下一次再次请求时,服务器也没法识别这个客户,所以又会作出新的响应。好比登陆时,客户明明已经登陆过了,可是跳转到网站的其余页面,因为是服务器是无状态的服务器还得请求一次。为了实现指望的保持状态功能,因而引入了cookie技术。安全
Cookie是保存在客户端的小段文本,随着客户端每个请求发送该url下的全部cookies到服务器端。服务器
Cookie的详细工做流程以下:cookie
一、第一次请求时,浏览器中是没有cookie信息的。session
二、服务器接收到请求后,会首先检查是否存在Cookie,若是没有Cookie,会生成一个Cookie。在响应头中Set-Cookie中生成Cookie信息。生成的Cookie文本中,存在一个sessionId,服务器会记录下来这个sessionId。网站
三、客户端再次请求时,浏览器会自动将Cookie信息添加到请求头上,服务器接到请求会根据sessionId来判断身份。url
Session保存在服务器端(在服务器端生成),经过惟一的sessionId来区别每个用户。sessionId随每一个请求发送到服务器(sessionId其实是Cookie中的一个字段),Session其实是一个保存在服务器的数据表,每个sessionId对应一个用户。经过Cookie获取到SessionId,而后再经过session的key获取session值。spa
思考:若是不使用Cookie能不能实现维持会话?3d
仔细分析Cookie的功能,咱们使用Cookie最重要的就是保存了一个sessionId而后每次请求时,在请求头中携带过去。若是没有了Cookie,那么咱们能够不能够经过其余的手段把这个sessionId发送到服务端,并经过其余手段再吉首这个sessionId。好比咱们能够经过在Url后面添加上sessionId,这样的话服务器端也能获取到sessionId,而后 服务端再将sessionId返回回来,客户端再进行保存。这样的话也可以实现相似于Cookie的功能,可是这样不太安全,由于sessionId直接在Url后面是可见的,很容易就被模仿了。也存在一个方法提升安全性,那就是服务器产生一个tooken,每请求一次tooken发生变化,tooken只能使用一次,这样也能提升安全性。blog