1:Session是什么?
会话。
虽然Http不保存请求,但是现实要求web应用要有能力保存用户的会话, 不能总让用户输入用户名密码
2:保持Session的四种技术:
(1)网址重写:
概念:
轻量化Session追踪技术
把token作为查询字符串加到url后面,用?号隔开
token是健值对,每两个token之间用&隔开
适用于:
token不必在过多的URL中四处携带,并且Token信息不太重要的情况
缺点:
URL限制2000字符
仅当有链接要插入token值时,值才能转化为资源
token值不容易插到静态链接中
空格、&符、问号等都必须编码
URL中信息时明文可见的
网址重写必须在服务端有效
(2)隐藏域
概念:
轻量化Session追踪技术
将token放到HTML表单的隐藏域中,用户提交表单,隐藏域也提交到服务器中
适用于:
页面包含表单、或者可以在页面添加表单,并且信息不必在跨越多个URL的情况
与网址重写比优点:
不必对字符进行编码
(3)cookie
概念:
自动地在Web服务器和浏览器之间来回传递的一小块信息
作为HTTP标头嵌入,传输过程由HTTP协议处理
根据需要可以设置cookie有效期 (maxAge属性)
每台Web服务器最多支持20个cookie
适用于:
需要跨越很多页面的信息
缺点:
用户可以通过修改浏览器设置拒绝接受cookie
取值不方便,只有getName方法,没有getCookieByName方法
不能直接删除cookie,只能创建同名的cookie,并设置maxAge = 0,并添加到HttpServletResponse中;
使用:
服务器创建cookie:Cookie languageCookie = new Cookie(“language”,“Italian”);
服务器发送cookie:httpServletResponse.addCookie(cookie);
浏览器获取cookie:
Cookie[] cookies = request.getCookies();
if ( cookies != null ) {
for( Cookie cookie : cookies ){
if (cookie.getName() .equals("maxRecords")) {
maxRecordsCookie = cookie;
break;
}
}
}
删除Cookie:
Cookie languageCookie = new Cookie(“language”,“”);
languageCookie.setMaxAge ( 0 );
httpServletResponse.addCookie(cookie);
(4)HttpSession对象
概念:
第一个用户第一次访问某个网站时自动创建。
可以没有或只有1个HttpSession
用户只能访问自己的HttpSession
使用:
获取:HttpServletRequest的getSession()获得: HttpSession getSession();
存储:HttpSession的setAttribute(String name, Object value)将值放在HttpSession中
销毁:invalidate和setMaxInactiveInterval是设置静默多久后(即最后一个用户访问后多久)销毁
比较:
放在HttpSession的值时存在内存中。
存储对象要小而少,对象要实现Serializable接口