首页 > 代码库 > 开发路程(2):Cookie和Session
开发路程(2):Cookie和Session
Cookie和Session是很常用的实现Http状态的技术.
1.为什么要使用Cookie和Session?
由于Http协议请求过程,是基于TCP/IP,当客户端请求服务器,服务器处理后, 进行响应,这个过程是无状态的.在有些时候,是需要保存一些客户端的请求信息,识别客户端的某些状态.智能的,有针对性的去分析某些客户端的习惯.这些时候,就需要记录客户端的连接状态,识别请求的状态等.为了解决类似的事情,就需要使用到Cookie和Session.
2.Cookie和Session的具体知识?
(1)Cookie:在客户端访问某个网址时,会将请求提交到服务器进行处理,在发送请求的时候,浏览器会将页面头部信息一并的提交到服务器端进行处理.在处理过程中, Cookie在服务器端生成,与此同时,可以将一些需要保存的信息,存到这个Cookie中.生成Cookie对象时,需要确定具体的名称及具体的值,可以设置当前Cookie的过期时间,设置过期时间后,就相当于持久化Cookie中的数据,此时的Cookie会以之前的Cookie名称,保存到客户端.不过不设置过期时间.则当前Cookie的生命期是浏览器的会话期间,一旦关闭浏览器,当前Cookie就会不存在了.这个阶段的Cookie信息是保存在内存里面的.在服务端,处理完后,会将生成Cookie,随着Http相应,会在Http相应头中,加上Cookie信息,浏览期接受到响应后,会按照Http相应头里的Cookie在客户端建立Cookie.在下次客户进行请求的时候,Http会附带着已经存储过Cookie,一并发送到服务器.一个域,在客户端建立.所以 Cookie都是可以共享的,只要没有过期.
(2)Session: Session是在服务器端生成的,存储在服务器端,寄存在内存中.可以对Session设置过期时间,如果不设置过期时间,默认的Session过期时间是30分钟(在不同的服务器中,他的过期时间略有不同,本文是以Tomcat来说的)但是, Session的生成的同时,会生成一个与之相关连的SessionID,此SessionID的存储是需要Cookie来完成的. SessionID是以名称为JSESSIONID,其值应该是一个既不会重复,又不容易被找到规律以仿照的字符串. SessionID会随着此次Http相应,一并返回到客户端,在保存在客户端中.到当前请求再次发出后,该SessionID会随着Http头部,传到服务器中,服务器依据当前SessionID得到与之对应的Session.
通过Cookie的方式存储Session状态.只是其中一种方式.如果客户端禁用Cooie的话,很多网站依然可以存储客户信息.一种处理方式是URL重新,将SessionID直接附加在请求地址的后面.另外一种,使用隐藏自动的方式,就是服务器自动在表单中,添加一个隐藏字段,以便在表单提交时将SessionID一起传到服务器.
3.Cookie和Session的区别?
Cookie是存储在客户端,Session是存储在服务器.
在保存相对要求安全性低的信息时候,可以考虑使用Cookie,在相对安全性要求高的信息时候,可以考虑使用Session.毕竟Cookie存在客户端,其他人可以查找并分析.
最后,在对性能要求高的时候不适合使用Session的,因为Session会一直存在服务器,直到当前Session过期,而且Cookie存储是字符串类型的信息,而Session可以存储任何形式的信息,Session也不存在访问域的限制.
个人觉得,在存储相对持久的信息应该考虑Cookie.因为Cookie可以以文件的形式,存在客户端.在存在一些登录的验证及信息拦截的时候,可以使用Session.