Cookie和Session

来源:互联网 发布:赛车游戏网络同步 编辑:程序博客网 时间:2024/05/24 06:10
Cookie 和 Session

1 修改jsp页面的编码 window——jsp——jsp File
1.会话:一次交互流程,交互开始会话开始,交互结束会话结束。
2.web中 :浏览器连接到服务器,会话开始,浏览器结束,会话结束。

3.Cookie和session是保存会话中产生的数据,
     Cookie——是保存在浏览器(客户端),生命周期可设置。
     Session——是保存在服务器 生命周期是会话结束终止使用,但是存在于服务器中。

4.Cookie的API
    Cookie C = new Cookie(”键name”,”值”)键自定义
    response.addCookie(C):将cookie发送到浏览器
    request.getCookies():获取Cookie数组对象
    cookie.setPath(“路径”):给cookie自定义添加路径
    cookie.setMaxAge(“时间”):给cookie    设置生存时间
    cookie.getName():获取cookie的名字
    cookie.getValue():获取cookie的值

5.Cookie生命周期
    默认:浏览器关闭Cookie死亡
    设置:cookie.setMaxAge(“时间”),浏览器关时会将Cookie写到磁盘,第二次打开使用

6. Cookie使用:
    服务器创建cookie对象:Cookie C = new Cookie(”键name”,”值”)键自定义
        注意:一个Cookie是保存少量信息的键值对,路径相同 重名,则覆盖
    Cookie被服务器发送到浏览器:response.addCookie(C)
        本质是设置响应头:set—Cookie name=value
    Cookie由浏览器保存
    以后请求,Cookie会被带到服务器,请求体携带过来。
    服务器获取:
        Cookie[] Cs =  request.getCookies();
        If(cs !=null){
            For(Cookie c :cs){
                c.getName()+c.getValue()
            }
        }
7.注意事项:
    *除了name,value其余属性为可选属性
    *Cookie存储数量是有限的,一般浏览器300是上限,针对于单个服务器20个
    *cookie大小有限制4kb
    *cookie也可以由浏览器产生

8.session :域对象。由服务器创建,存在服务器,结合Cookie使用。可以跨多个也面请求

9.sessionAPI:
    HttpSession hs = request.getSession():
    hs.setAttribute():给Session设置值
    hs.getAttribute():获得Session设置的值
    hs.removeAttribute():移除session的数据
    Session.invalidate():移除session则连其中的数据一起移除

10.第一次访问Servlet会生成session,
    HttpSession hs = request.getSession()创建Session对象
    给Session设置属性,再在其他页面取出属性值
    创建完Session之后会给浏览器发送一个Cookie,这个Cookie  JSESSIONID=字符串这个Cookie值和上面Session对应。
    第二次访问服务器,携带Cookie到服务器
    获取Session对象,根据cookie的ID获取到已经存在的Session
    操作Session
    注意:同一个Session,可以实现不同页面的共享,对于同一个访问者,Session唯一,不同访问者不唯yi

11.Session生命周期:
    出生:可以理解为getSession时(但是实际是访问页面的时候就已经创建了)
    死亡:服务器非正常关闭 、invalidate、session如果不适用30分钟服务器会自动将其销毁

12.Cookie和Session使用时机:
    数据安全性高:用Session
    多个页面要实现复杂的数据共享:使用Session
    Cookie一般用于数据短小安全性不高的场合。

13.浏览器端的会话技术: cookie
                  存储完交互产生的数据保存在浏览器端

           浏览器(自动): 接收cookie---保存cookie--传递cookie
           服务器(重点): 创建cookie---传递cookie---接收cookie
                创建cookie: new cookie("","");
                传递cookie: addCookie(cookie对象);
                接收cookie: Cookie[] getCookies();
                JSP页面想获得cookie就必须要用重定向,跟浏览器交互后才有Cookie

14.默认情况: 会话级别   只要关闭浏览器 cookie销毁

           持久化:  setMaxAge(默认是秒值开始的)
                0  移除cookie
                >1 设置申明周期
                -1 会话级别
15.服务器端的会话技术: session
                  存储完交互产生的数据保存在服务器端

        session是一个域对象
                xxxAttribute("",object)
        作用域:
             一次会话中有效
        *(重点) request.getSession()
        
            如何去保证一次会话中使用的是同一个session?
                jsid ---session基于cookie

            为什么浏览器关闭就不是同一个session?

                     浏览器关闭 cookie销毁


案例一: 统计一个servlet的访问次数
需求:
    有一个servlet(countServlet),每访问一次这个servlet,将访问的次数+1,
    当我们访问另一个servlet(showServlet),展示访问CountServlet的次数

技术分析:ServletContext对象

ServletContext:    上下文对象(全局管理者)

服务器启动的时候就会为每一个项目创建一个全局管理者--ServletContext对象

ServletContext的作用:
    
    2 .获取全局的初始化参数
    3 .获取一个文件的MIME类型( 例如:一个html文件   mime类型:text/html   text/css  img/jpeg)
    4 .管理文件 (例如:获取文件路径,根据文件获取流)

    1 .资源共享(在本项目下的所有servlet都可以共享它)

获取ServletContext:
        方式1:
            ServletContext getServletConfig().getServletContext()
        方式2:
            ServletContext getServletContext()

获取ServletConfig对象和ServletContext对象
            直接在自己的servlet里面调用
                    this.getServletConfig()
                    this.getServletContext()
常用的方法:
获取全局的初始化参数
       String getInitParameter(String name):获取指定的初始化参数
       
获取一个文件的MIME类型
       getMimeType(String filename):获取文件的mime类型

管理文件
       getRealPath(String path):获取当前项目在tomcat服务器中的根路径       
       InputStream is=new FileInputStream(new File(path)) 之前的获取方式
              
       getResourceAsStream(String path):根据文件获取流

资源共享的方法(可以把他当成一个map集合) (掌握)
            setAttribute(String key,Object value):储存值
            Object getAttribute(String key):获取值,若没有则返回一个null
            removeAttribute(String key):移除值

ServletContext资源共享的方法:可以被多个servlet共
---------------------------------------------------------------------------------------------------
步骤分析:
         1 需要2个servlet(countServlet和showServlet)
         
         2 在countServlet
              1 创建servletContext对象
              2 从servletContext取值
                    无:count=1
                    有:count=count+1

              3 在将设置完的值存到servletContext
                                  
         3 在showServlet
            1 创建servletContext对象

            2 从servletContext取值
                    无: 直接响应页面 没有访问过
                    有:  直接取值,响应给页面访问次数                           
---------------------------------------------------------------------------------------------------
案例二: 文件下载
需求:
    在页面上有几个连接,点击连接就可以下载相应的文件了

技术分析:  response---响应对象

    作用:
            通过他可以往浏览器输出内容    
    响应的组成:
            响应行 响应头 响应体

    1 操作响应行
        格式:
            协议/版本 状态码 状态码说明  HTTP/1.1 200 OK
                
        常用的方法:
            操作状态码:5种状态码
                    1 2 3 :正常的响应
                     4 5:有问题的响应
                (理解)setStatus(状态码):针对的是 1xx 2xx 3xx
                    setStatus(302)
                    需要一个头
                
                (了解)sendError(int code):针对的是 4xx 5xx

    2 操作响应头(重点)
        格式:
            key:value(value可以是多个值)
        
        常用的方法:
            ★setHeader(String key,String value):设置字符串形式的响应头
            
            (了解)
             addHeader(String key,String value);添加字符串形式的响应头
                               若没有设置则设置,若设置过则添加
                        
        常用的响应头:
            1 location:重定向
                重定向方式1(了解)需要配合302状态码一起使用
                  response.setStatus(302);
                  response.setHeader("location", "/servlet02/helloServlet7");
                
                重定向方式2(掌握)
                常用方法:
                    ★response.sendRedirect("url");

            2 refresh:定时刷新
                response.setHeader("refresh","秒数;url=跳转的路径");            
            
             3 content-type:设置文件的mime类型 并且通知浏览器用什么编码打开
                
                (了解)response.setHeader("content-type","文件的mime类型;charset=utf-8");
                
                
                (重要)response.setContentType("文件的mime类型;charset=utf-8");

                         response.setContentType("文件的mime类型")
            
            4 content-disposition:文件下载
                response.setHeader("content-disposition","attachment;filename="+文件名称);

    
    3 操作响应体
        页面上要展示的内容
        常用方法:
            PrintWriter getWriter():字符流
            ServletOutputStream getOutputStream():字节流            
        注意:
            若是能写的出来的内容用字符流,其他全用字节流
            中文乱码问题
            字符流和字节流不能同时出现
            服务器会自动帮我们关闭流.
原创粉丝点击