session和cookie简介

转载注明出处:http://www.cnblogs.com/wdfwolf3/ 谢谢
会话跟踪是Web程序中经常使用的技术,用来跟踪用户的整个会话。经常使用的技术是Cookie与Session。Cookie经过在客户端记录信息肯定用户身份,Session经过在服务器端记录信息肯定用户身份。
1.Cookie
HTTP是一种无状态的协议,服务器单从网络链接上无从知道客户身份。因此给客户端们颁发一个通行证,客户端访问都必须携带本身通行证。这样服务器就能从通行证上确认客户身份了,这就是Cookie的工做原理。
Cookie其实是一小段的文本信息。客户端请求服务器,若是服务器须要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还能够根据须要修改Cookie的内容。
Cookie经常使用属性
属  性  名
描    述
String name
该Cookie的名称。Cookie一旦建立,名称便不可更改
Object value
该Cookie的值。若是值为Unicode字符,须要为字符编码。若是值为二进制数据,则须要使用BASE64编码
int maxAge
该Cookie失效的时间,单位秒。若是为正数,则该Cookie在maxAge秒以后失效。若是为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。若是为0,表示删除该Cookie。默认为–1
boolean secure
该Cookie是否仅被使用安全协议传输。安全协议。安全协议有HTTPS,SSL等,在网络上传输数据以前先将数据加密。默认为false
String path
该Cookie的使用路径。若是设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序能够访问该Cookie。若是设置为“/”,则本域名下contextPath均可以访问该Cookie。注意最后一个字符必须为“/”
String domain
能够访问该Cookie的域名。若是设置为“.google.com”,则全部以“google.com”结尾的域名均可以访问该Cookie。注意第一个字符必须为“.”
String comment
该Cookie的用处说明。浏览器显示Cookie信息的时候显示该说明
int version
该Cookie使用的版本号。0表示遵循Netscape的Cookie规范,1表示遵循W3C的RFC 2109规范
Cookie有效期
Cookie的maxAge属性决定着Cookie的有效期,单位为秒(Second)。若是maxAge为负数,表示临时性,不会被持久化,不会被写到Cookie文件中,该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。若是maxAge为0,则表示删除该Cookie。Cookie机制没有提供删除Cookie的方法,所以经过设置该Cookie即时失效实现删除Cookie的效果。失效的Cookie会被浏览器从Cookie文件或者内存中删除。
Cookie是不可跨域名的
正常状况下,同一个一级域名下的两个二级域名如www.helloweenvsfei.com和images.helloweenvsfei.com也不能交互使用Cookie,由于两者的域名并不严格相同。若是想全部helloweenvsfei.com名下的二级域名均可以使用该Cookie,须要设置Cookie的domain参数。
Cookie保持登陆状态
一种方案是把密码加密后保存到Cookie中,下次访问时解密并与数据库比较。若是不但愿保存密码,还能够把登陆的时间戳保存到Cookie与数据库中,只验证用户名与登陆时间戳就能够。另外一种方案,只在登陆时查询一次数据库,之后访问验证登陆信息时再也不查询数据库,实现方式是把帐号按照必定的规则加密后,连同帐号一块保存到Cookie中。下次访问时只须要判断帐号的加密规则是否正确便可。
2.Session
Session保存在服务器上,客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,客户端浏览器再次访问时只须要从该Session中查找该客户的状态就能够了。Session对象是在客户端第一次请求服务器的时候建立的,Session也是一种key-value的属性对,
Session超时时间
为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除,这个时间就是Session的超时时间。若是超过了超时时间没访问过服务器,Session就自动失效了。Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。
Tomcat中Session的默认超时时间为20分钟。经过setMaxInactiveInterval(int seconds)修改超时时间。能够修改web.xml改变Session的默认超时时间。例如修改成30分钟:
<session-config>
   <session-timeout>30</session-timeout>      <!-- 单位:分钟 -->
</session-config>
注意:<session-timeout>参数的单位为分钟,而setMaxInactiveInterval(int s)单位为秒。
HttpSession的经常使用方法
方  法  名
描    述
void setAttribute(String attribute, Object value)
设置Session属性。value参数能够为任何Java Object。一般为java Bean。value信息不宜过大
String getAttribute(String attribute)
返回Session属性
Enumeration getAttributeNames()
返回Session中存在的属性名
void removeAttribute(String attribute)
移除Session属性
String getId()
返回Session的ID。该ID由服务器自动建立,不会重复
long getCreationTime()
返回Session的建立日期。返回类型为long,常被转化为Date类型,例如:Date createTime = new Date(session.get CreationTime())
long getLastAccessedTime()
返回Session的最后活跃时间。返回类型为long
int getMaxInactiveInterval()
返回Session的超时时间。单位为秒。超过该时间没有访问,服务器认为该Session失效
void setMaxInactiveInterval(int second)
设置Session的超时时间。单位为秒
void putValue(String attribute, Object value)
不推荐的方法。已经被setAttribute(String attribute, Object Value)替代
Object getValue(String attribute)
不被推荐的方法。已经被getAttribute(String attr)替代
boolean isNew()
返回该Session是不是新建立的
void invalidate()
使该Session失效
客户端支持
HTTP协议是无状态的,Session不能依据HTTP链接来判断是否为同一客户,所以服务器向客户端浏览器发送一个名为SESSIONID的Cookie,它的值为该Session的id。Session依据该Cookie来识别是否为同一用户。该Cookie为服务器自动生成的,它的maxAge属性通常为–1,表示仅当前浏览器内有效,而且各浏览器窗口间不共享,关闭浏览器就会失效。所以同一机器的两个浏览器窗口访问服务器时,会生成两个不一样的Session。可是由浏览器窗口内的连接、脚本等打开的新窗口(也就是说不是双击桌面浏览器图标等打开的窗口)除外。这类子窗口会共享父窗口的Cookie,所以会共享一个Session。
注意:新开的浏览器窗口会生成新的Session,但子窗口除外。子窗口会共用父窗口的Session。
客户端不支持Cookie
URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器可以解析重写后的URL获取Session的id。这样即便客户端不支持Cookie,也可使用Session来记录用户状态。
相关文章
相关标签/搜索