cookie的用处:
当不同的用户访问同一家网站时(采用相同的请求地址),服务器如何区分不同用户的请求操作呢?需要浏览器对发出的每个请求进行标识。属于同一个会话的请求,都带有相同的标识,不同的会话带有不同的标识。
cookie的底层原理:
客户端(浏览器)访问web服务器时(jsp文件),服务器通过Cookie构造器构造一个Cookie实类。然后由web服务器在HTTP响应消息头中附带Cookie实类至客户端,并保存到客户端内存中。在cookie生命周期内,以后每次请求都携带cookie
第一次访问
请求域中并未携带cookies,服务端接受请求之后,进行响应,将生成的cookie 传至客户端,保存在内存中
第二次访问
请求域从内存中取出cookies并携带至服务端,服务端根据cookies对请求进行分类
cookie和sesion的联系
1,浏览器第一次访问服务器时会创建一个session对象并返回一个JSESSIONID=ID的值, (将sessionId 以响应报文的方式传回客户端浏览器内存或以重写url方式送回客户端)创建一个Cookie对象key为JSSIONID,value为ID的值,关闭此浏览器窗口,其内存中jsessionId也就随之销毁。
2,浏览器在第二次访问服务器的时候携带Cookie信息JSESSIONID=ID的值,如果该JSESSIONID的session已经销毁, 那么会重新创建一个新的session再返回一个新的JSESSIONID通过Cookie返回到浏览器
3,session是基于Cookie技术实现,重启浏览器后再次访问原有的连接依然会创建一个新的session, 因为Cookie在关闭浏览器后就会消失,但是原来服务器的Session还在,只有等到了销毁的时间会自动销毁(session失效时间默认30分钟,可以通过session.invalidate使session失效)
总结:
一般session都是在cookie的基础上实现的,每一个不同的session对应着一个不同的session_id,这个session_id是用来判断session是否相同的,session_id大多是情况下都是默认通过cookie传输,所以说session是基于cookie的基础的(当然session_id也可以通过其他方式传输,只要将这个session_id传到客户端就可以,比如URL rewriting重写URL也可可以替代cookie传输session_id),隐藏域(隐藏form表单提交session_id也可以)