首页 > 代码库 > JavaWeb会话跟踪

JavaWeb会话跟踪

cookiesession是常用的会话跟踪技术

cookie机制

1web应用程序是使用HTTP协议传输数据的HTTP协议是无状态的协议,一旦数据交换完毕就会关闭链接。Cookie可以弥补HTTP协议无状态的不足。

位于:javax.servlet.http.Cookie

2Cookie具有不可跨域名性Cookie的管理是浏览器,浏览器判断一个网站是否能操作另一个网站的Cookie的依据是域名。例:images.baidu.comwww.baidu.com不是同一个域名,cookie不能相互操作。但可以对此类cookie做特殊处理,让其相互访问。

3Unicode编码:保存中文

中文属于Unicode字符,在内存中占4个字符,而英文属于ASCII字符,内存中只占2个字节。Cookie中使用Unicode字符时需要URLEncode编码,否则乱码。一般采用UTF-8即可,GBK不推荐使用,因为浏览器不一定支持,而javascript也不支持GBK

4BASE64编码:保存二进制图片

Cookie可以使用二进制数据。例如在Cookie中使用数字证书,提供安全度。使用二进制数据时需要编码BASE64

BASE64sun.misc.BASE64Encode;sun.misc.BASE64Decoder;

byte[] binary = new byte[1024];

String content = BASE64Encode.class.newInstance().encode(binary);

5Cookie的属性

                           wKioL1O8LMLRXwF_AATJyUDnHJA487.jpg

 

6Cookie的有效期

cookie.setMaxAge()

负数:为临时性Cookie,不会被持久化,不会写到cookie文件中,cookie信息保存在浏览器内存中,关闭浏览器cookie就会消失,cookie的默认值为-1

0:为零表示删除该cookie,会从浏览器内存中删除。

maxAge属性只是被浏览器判断是否过期的,不会提交到服务端。

修改:新建一个同名的cookie,覆盖原来的cookie

删除:新建同名的cookie,并将maxAge为零,进行覆盖。

7、永久登录

方案:在登录时查询一次数据库,以后访问验证登录信息时不再查询数据库。实现方式是把账号按照一定的规则加密后,连同账号一块保存到cookie中。下次访问时只需要判断账号的加密规则是否正确即可。如:把账号连同密匙用MD5算法加密后保存到cookie中,验证时,验证cookie中的账号与密匙是否与cookie中的一样。

 

session机制

session对应类javax.servlet.http.HttpSession

session的使用比cookie方便,但过多的session存储在服务器内存中,会对服务器造成压力。

session的生命周期:

session在用户第一次访问服务器的时候自动创建,需要注意只有访问JSP,Servlet等程序时才会创建session,访问html等静态资源并不会创建session。如果未生成session,可以使用request.getSession(true)强制生成。session生成后,只要用户继续访问,服务器就会更新session的最后时间,并维护session。用户每访问服务器一次,无论是否读写session,服务器都认为该用户的session活跃了一次。

session的有效期:

越来越多的用户访问,session也会越多,为防止内存溢出,服务器会把长时间内没有活跃的session从内存中删除。超时时间属性为maxInactiveInterval,可设置超时时间。

tomcat的默认超时时间是20分钟。

web.xml也可以设置超时时间

<session-config>

         <session-timeout>60</session-timeout >  <!—单位:分钟à

</session-config>

session对浏览器的要求:

http协议是无状态的,不能依据http连接来判断是否同一客户,因此服务器向客户发送一个名为JSESSIONIDcookie,它的值为sessionidsession依据该cookie来识别是否为同一用户。该cookie为服务器自动生成,他的maxAge属性为-1,表示仅当前浏览器内有效。

如果客户端浏览器将cookie功能禁止,或者不支持cookie,例如大多数手机浏览器都不支持cookieJavaweb提供另一种方案:URL地址重写。

URL地址重写:

原理是将该用户sessionid信息重新写到URL地址中。

参考http://book.51cto.com/art/200912/169770.htm

wKiom1O8LRvzb08JAAC9fGe7gJ8489.jpg

wKioL1O8LPHBH5jCAAGO9E8eGww423.jpg

 


本文出自 “风云海滩” 博客,请务必保留此出处http://3950566.blog.51cto.com/3940566/1436107