标签:log .com getattr url style ima 客户端访问 二级域名 表示
转载注明出处: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来记录用户状态。
session和cookie简介
标签:log .com getattr url style ima 客户端访问 二级域名 表示
原文地址:http://www.cnblogs.com/wdfwolf3/p/7473132.html