JSP中的Cookie和Session

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{
   //打开指定的页面
}


你可能感兴趣的:(jsp,session,cookie)