由于http的无状态性,使得会话管理或会话跟踪成为web应用开发一个无可避免的主题。默认下,一个web服务器无法区分一个http请求是否为第一次访问。例如,一个web邮件应用要求用户登陆后才能查看邮件,因此,当用户输入了相应的用户名和密码后,应该不应该再次提示需要用户登陆,应该必须记住那些用户已经登陆。换句话说,应该必须能管理用户的会话。
URL重写
URL重写是一种会话跟踪技术,它将一个或者多个token添加到URL的查询字符串中,每个token通常为key=value形式,如下:
url?key-1=value-1&key-2=value-2
注意,URL和tokens间用问好(?)分割,token间用与号(&)分割。
url重写适合于tokens无须在太多url间传递的情况下,然而它有如下限制:
url在某些浏览器上最大长度为2000字符串;
若要传递到下一个资源,需要将值插入到链接中,换句话说,静态页面很难传值;
url重写需要在服务端上完成,所有的链接都必须带值,因此当一个页面存在很多链接时,处理过程会是一个不小的挑战。
某些字符,例如空格,与和问号等必须用base64编码;
所有信息都是可见的,某些情况不合适。
因为存在如上限制,url重写仅适合于信息仅在少量页面间传递,且信息不敏感。
cookies
cookies是一个很少的信息片段,可以自动在浏览器和web服务器间交互,因此cookies可存储在多个页面间传递信息。cookies作为HTTP header的一部分,其传输由HTTP协议控制。此外,你可以控制cookies的有效时间。浏览器通常支持每个网站高达20个cookies。
cookies的问题在于用户可以通过改变其浏览器设置来拒绝接受cookies。
要使用cookies,需要熟悉javax.servlet.http.coockie类以及httpServletRequest和httpServletResponse两个接口。
可以通过传递name和value两个参数给cookie类的构造函数来创建一个cookies:
Cookie cookie = new Cookie(name,value);
如下是一个创建语言选择的cookie示例:
Cookie languageSelectionCookie = new Cookie(“language”,”Italian“);
创建完一个Cookie对象后你可以设置domain,path和maxAge属性。其中maxAge属性决定Cookie何时过期。
HttpSession对象
在所有的会话跟踪技术中,httpSession对象是最强大和最通用的。一个用户可以有且最多有一个httpSession,并且不会被其他用户访问到。httpSession对象在用户第一次访问网站的时候自动被创建,你可以通过调用HttpServletRequest的getSession方法获取该对象。
ps:这是对会话的初步了解后续会发布详解博文