Cookie and Session

Cookie and Session  

1、cookie技术 
        a, cookie是什么? 
            浏览器访问服务器时,服务器发送给浏览器 
        少量的数据,这些数据以set-cookie消息头的 
        方式发送给浏览器。浏览器会将set-cookie消 
        息头设置的内容保存下来(内存或者是硬盘)。 
        当浏览器再次访问服务器时,会将之前保存的数 
        据以cookie消息头的方式发送给服务器,通过这 
        种机制,可以将浏览器与服务器之间交互的数据 
        保存下来。 
        b, 创建cookie 
            Cookie cookie = new Cookie(String name, String value); 
            cookie.setMaxAge(int seconds); 
            response.addCookie(cookie); 
        c,查询cookie 
            //如果没有cookie,会返回null 
            Cookie[] request.getCookies(); 
            String cookie.getName(); 
            String cookie.getValue(); 
        d,编码问题 
            cookie的值只能是ascii字符,如果出现了非 
            ascii字符(比如中文),需要将中文转换成 
            对应的ascii字符表示。 
                可以使用 URLEncoder.encode 方法或者 
                BASE64Encoder.encode方法来实现转换。 
            要注意: 
                在查询时,要使用对应的方法来解码。 
        e, 生存时间 
                cookie.setMaxAge(int seconds) 
            单位是秒。 
                seconds <0: 保存在内存里(默认值),只有 
            当浏览器关闭,cookie才会删除。 
               seconds > 0: 以文件的方式保存在硬盘上, 
              超过这个时间,浏览器会删除cookie。 
              seconds = 0: 立即删除cookie。 
              如果要删除一个名叫"username"的cookie: 
                      Cookie cookie = new Cookie("username",""); 
                      cookie.setMaxAge(0); 
                      response.addCookie(cookie); 
            f,    路径问题 
                浏览器在访问服务器的某个路径时,会 
            先比较cookie的路径与服务器的路径,只有 
            符合条件的cookie才会发送给服务器。 
                cookie如果没有调用setPath方法,则会 
            有一个默认的路径,这个默认的路径是 
            创建该cookie的组件的路径( 当前路径 )。 
                比如: /web06_3/jsp01/addCookie.jsp 
            创建了某个cookie,则该cookie的路径是: 
            /web06_3/jsp01 
                浏览器会比较cookie的路径与要访问的组件 
            的路径,只有当要访问的组件的路径是cookie 
            的路径或者其子路径时,浏览器才会发送该 
            cookie组服务器。 
                //设置cookie的路径 
                cookie.setPath(String str); 
            比如: 
                cookie.setPath("/web06_3");这样设置的 
            作用是,该组件生成的cookie,可以被这个应用 
            下所有的其它组件访问到。
                如果写为cookie.setPath("/"),那么该组件生
            成的cookie,可以被所有应用所有的其它组件访问到
 
    练习: 
        写一个Find_AddCookieServlet,该servlet 
    先查询有没有一个名叫 userProfile的cookie,如果有,则 
    显示该cookie的值,如果没有,则创建该cookie。 
        new Cookie("userProfile","abc") 
        g, cookie的限制 
            cookie可以被禁止。 
            cookie的大小有限制(大约4k左右,跟 
            浏览器有关系),数量也有限制,浏览器 
            在本地大约能保存300个左右的cookie。 
            cookie不安全 
            cookie的值只能是字符串 
    2、session技术 
        (1)什么是session? 
        浏览器访问服务器时,服务器会创建一个 
    对象(该对象称为session对象,该对象有一个唯一 
    的id号,称为sessionId),服务器在默认情况下, 
    会将这个sessionId以set-cookie消息头的方式 
    发送给浏览器(即使用cookie机制),浏览器会将 
    sessionId保存到内存里。当浏览器再次访问服务 
    器时,会将sessionId发送给服务器。服务器依据 
    sessionId就可以找到之前创建的session对象。 
        (2) 如何获得一个session对象? 
        a, HttpSession session =  
        request.getSession(boolean flag); 
            当flag为true: 
                服务器会检查请求中是否包含sessionId, 
            如果没有,服务器会创建一个session对象; 
            如果有,服务器依据sessionId去查找session 
            对象,如果找到了,则返回,找不到,创建 
            一个新的session对象。 
            当flag为false: 
                服务器会检查请求中是否包含sessionId, 
            如果没有,返回null; 
            如果有,服务器依据sessionId去查找session 
            对象,如果找到了,则返回,找不到,返回 
            null。 
        b,HttpSession session =  
        request.getSession(); 
                该方法完全等价与request.getSession(true)。 
        (3) session的常用方法: 
            String session.getId(); //返回sessionId。 
            session.setAttribute(String name, 
            Object obj); 
            //name对应的值不存在,返回null。 
            Object session.getAttribute(String name); 
            session.removeAttribute(String name); 
        (4)session的超时 
            服务器会将空闲时间过长的session对象 
        删除掉,称之为session超时。 
            服务器会有一个缺省的超时限制(一般是 
            30分钟),这个缺省时间可以修改。 
                比如tomcat可以修改 conf/web.xml 
                 <session-config> 
                    <session-timeout>30</session-timeout> 
                </session-config> 
            该修改会影响到所有部署在这个服务器上的 
            应用,一般不要修改。 
            可以对某个应用,在web.xml文件中,添加 
                <session-config> 
                    <session-timeout>30</session-timeout> 
                </session-config> 
            可以调用session.setMaxInactiveInterval(int  
            seconds)设置超时限制。 
        (5) session的删除 
             session.invalidate();     
案例:     
    session验证 
        step1 在登录成功之后,向session对象里 
    绑订数据: 
        session.setAttribute("user",user); 
        step2 对于需要保护的资源(即必须要登录之 
    后才能访问的资源),添加验证代码: 
        Object obj = session.getAttribute("user"); 
        if(obj == null){ 
            //没有登录 
            response.sendRedirect("login.jsp"); 
        }else{ 
            //正常访问 
        } 
         
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值