1. cookie
1.1 什么是****cookie
浏览器访问服务器时,服务器会将一些数据(少量的,4KB左右)以set-cookie消息头的方式发送给浏览器。浏览器会将这些数据保存下来(内存、或者以文件的形式保存在硬盘上)。当浏览器再次访问服务器时,会将这些数据以cookie消息头的方式发送过来。
1.2 如何创建****cookie
Cookie cookie=new Cookie(String name,String value);
response.addCookie(cookie);
1.3 如何查询****cookie
Cookie[] cookies=request.getCookies();
需要注意的是:该方法可能返回null
遍历该数组:
String cookieName=cookie.getName();
String cookieValue=cookie.getValue();
1.4 编码问题
cookie的值只能是ascii字符,对于中文,需要将其转换成对应的ascii字符的表示形式:
String code=URLEncoder.encode(String str,String code);//编码
String string=URLDecoder.decode(String str,String code);//解码
1.5 cookie****的生存时间
cookie.setMaxAge(int sec);//设置cookie的生存时间,单位秒
sec>0:浏览器会将cookie的值最多保存sec秒,如果浏览器关闭,会将cookie保存到硬盘上
sec=0:立即删除该cookie
sec<0:(缺省值)将cookie保存到内存中,如果浏览器关闭,cookie则被删除。
1.6 删除****Cookie
如果要删除一个名叫userprofile的cookie:
Cookie cookie=new Cookie(“userprofile”,””);//创建一个相同的cookie,这一个Cookie会去替换原来的cookie。
cookie.setMaxAge(0);//将新的cookie的生存时间设置为0
response.addCookie(cookie);//添加到response对象中
1.7 路径问题
浏览器向服务器发送请求时,会比较要访问的地址与cookie的地址(路径)是否匹配,只有匹配的cookie才会发送给服务器。
cookie有一个默认的路径,等于创建该cookie的组件的路径。比如:
在Web/app1/addCookie.jsp创建了一个cookie,则该cookie的路径等于“/Web/app1”.
在”/Web/app1”相同的路径中,可以获取该cookie.
设置cookie的路径:cookie.setPath(String path);
例如:cookie.setPath(“/Web”);
规则: cookie的路径必须是要访问的路径的上层目录戒者是不要访问的路径相等,浏览器 才会将cookie发送给服务器。
一般可以设置setPath("/appname"),表示访问该应用下的所有地址,均会发送cookie。
1.8 cookie****的限制
cookie可以禁止
cookie的大小有限制(4k左右)
cookie的数量也有限制(浏览器大约能保存300个)
cookie的值叧能是字符串,要考虑编码问题。
cookie不安全
2. session
2.1 什么是****session
浏览器在访问服务器时,服务器会在内存空间里创建一个session对象(该对象有一个唯一的ID号,类似于人的身份证号码,称之为sessionID)。服务器默认情况下会将sessionID以cookie的形式发送给浏览器,浏览器再次访问服务器时,会将sessionID发送过来,服务器可以通过sessionID找到对应的session对象。
2.2 如何获得****Session
HttpSession session=request.getSession();
HttpSession session=request.getSession(boolean flag);
这两个方法都返回一个符合HttpSession接口要求的对象(session对象)。
当flag=true;服务器会先检查请求当中是否有sessionID,如果没有,则创建一个session对象;如果有,服务器会依据该sessionID查找对应的session对象。如果找到则返回该对象,找不到则创建一个新的session对象。
当flag=false;服务器会检查请求中是否有sessionID,如果没有,返回null;如果有,服务器根据sessionID查找对应的session对象,如果找到,则返回,找不到则返回null.
注意:request.getSession()是request.getSesstion(true)的简写形式。
2.3 session****接口提供的常用方法
String getId();//返回sessionId
setAttribute(String name,Object obj);//设置属性(绑定数据)
Object getAttribute(String name);//获取属性。如果不存在,则返回null.
removeAttribute(String name);//解除数据绑定
2.4 session****超时
服务器会将超过指定空闲时间(在指定的时间内,该session对象没有使用)的session对象销毁掉
a.服务器一般会有一个默认的超时机制,大部分服务器都是30分钟。可以修改服务器的缺省超时时间。对于tomcat,可以修改安装目录下的/conf/web.xml中的:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
另外,也可以只修改某个应用的web.xml,这种修改只对当前应用有效。
b.也可以用代码的方式来实现:
session.setMaxInactiveInterval(int sec);//设置最大不活动间隔时间
*2.5 删除session----使session无效*
session.invalidate();//设置session无效
2.6 session案例:session验证
a.在登录成功以后,在session对象上绑定相关的数据,比如:
session.setAttribute(“user”,user);
b.对于需要保护的资源(需要登录成功之后,才能访问的地址),添加session验证代码:
Object obj=session.getAttribute(“user”);
if(obj==null){
//用户没有登录成功。跳转到登录页面
}else{
//打开指定的页面
}