zoukankan      html  css  js  c++  java
  • 15_会话技术_Cookie

    【简述】

    会话可理解为:用户打开一个浏览器,点击多个超链接,访问服务器多个Web资源,然后关闭浏览器,整个过程成为一个会话。

    【会话过程中我们要解决的一些问题】

    * 每个用户与服务器进行交互的过程中,各自会有一些数据,程序要想办法保存每个用户的数据。

    具体例子:用户点击超链接通过一个Servlet购买了一个商品,程序应该保存用户购买的商品,以便于用户点击结账Servlet时,结账的Servlet可以得到用户商品为用户结账。

    【Cookie简述】

    Cookie是客户端技术。程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的Web资源时,就会带着各自的数据去。这样Web资源处理的就是用户各自的数据了。

    【Session简述】

    Session是服务端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的Session对象,由于Session为用户浏览器独享,所以用户再访问服务器的Web资源时,就可以把各自的数据放在各自的Session中,当用户再去访问服务器中的其它Web资源时,其它Web资源再从用户各自的Session中取出数据为用户服务。

    【Cookie API——javax.servlet.http.Cookie类】

      javax.servlet.http.Cookie类用于创建一个Cookie,response接口中也定义了一个addCookie方法,它用于在其响应头中增加一个相应的Set-Coookie头字段。

    同样,request接口中也定义了一个getCookies方法,它用于获取客户端提交的Cookie。

    [ 常用方法如下 ]

    [1.构造Cookie对象]

    public Cookie(String name,String value)  //构造Cookie对象

    [2.设置cookie]

    setValue()     与  getValue()         //设置和获取Cookie的值

    setMaxAge() 与   getMaxAge()     //设置和获取Cookie的有效期

    setPath()      与   getPath()         //设置和获取Cookie的有效访问路径

    setDomain()  与   getDomain()

    [3.发送cookie到浏览器端保存]

    void response.addCookie(Cookie cookie);

    [4.服务端接受cookie]

    Cookie[] request.getCookie();    :接受cookie

    getName()  //获取cookie的name

     [ 提示  关于setPath ]

    * cookie.setPath("/");  可以在webapp(如果是Tomcat)文件夹下的所有应用共享Cookie

    * cookie.setPath("/Helloservlet/");   指cookie只能在HelloServlet应用下获得,即便是产生这个Cookie的Web应用也不可以。

    【Cookie原理】

    1.服务器创建cookie对象,把回话数据存储到cookie对象中。

      new Cookie("name","value"); 

    2.服务器发送cookie信息到浏览器。

      response.addCookie( cookie );

      [举例:响应头]set-cookie:name=Jack ( 隐藏发送了一个set-Cookie名称的响应头 )

    3.浏览器得到服务器发送的cookie,然后保存在浏览器端。

    4.浏览器在下次访问服务器时,会带着cookie信息

      [举例:请求头]cookie:name=jack   ( 隐藏带着一个叫cookie名称的请求头 )

    5.服务器接收到浏览器带来的cookie信息

      request.getCookies();

    【案例:利用Cookie技术获得用户上次登录的时间】

    [ CookieDemo00.java ]

    package com.Higgin.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet("/CookieDemo00")
    public class CookieDemo00 extends HttpServlet {
        public CookieDemo00() {
            super();
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            
            PrintWriter out =response.getWriter();
            out.print("您上次访问的时间是:");   //打印到浏览器
            
            //1.获得用户的时间Cookie
            Cookie[] cookies=request.getCookies(); //读取浏览器发送请求中的Cookie对象
            for(int i=0;cookies!=null&&i<cookies.length;i++){
                if(cookies[i].getName().equals("lastAccessTime")){
                    Long cookieValue=Long.parseLong(cookies[i].getValue());  //得到用户上次的访问时间戳
              out.print(cookieValue); //直接打印时间戳了! //Date date=new Date(cookieValue); //由于Tomcat的时间有点出错,暂时不用这种方式,直接用时间戳 //SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //out.print(dateFormat.format(date)); //打印到页面的是格式化后的时间 } } //2.给用户回送最新的访问时间 Cookie cookie=new Cookie("lastAccessTime",System.currentTimeMillis()+""); cookie.setMaxAge(60*5); //Cookie的寿命为5分钟 cookie.setPath("/HelloServlet"); response.addCookie(cookie); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }

    [ 第一次访问 http://localhost:8080/HelloServlet/CookieDemo00  ]

     [ 5分钟内再次访问  第二次访问在5分钟内,所以是带着Cookie数据的 ] 

     

    [ 5 分钟之后 访问 Cookie失效  效果等同于第一次访问]

    【Cookie注意点】

    * 一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(Name)和设置值(Value)。

    * 一个Web站点可以给一个Web浏览器发送多个Cookie,一个Web浏览器也可以存储多个Web站点提供Cookie。

    * cookie的数据类型只能保存非中文字符串类型的。可以保存多个cookie,浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie大小限制为4KB。

    * 如果创建了一个Cookie,并将它发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若用户希望该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时间设置为0即命令浏览器删除该Cookie。

    * 注意,删除cookie时,path必须一致,否则将无法删除。

     【Cookie细节】

    * void setPath( String uri ):设置cookie的有效访问路径。有效访问路径指的是cookie的有效路径保存在哪里,那么浏览器在有效路径下访问服务器时就会带着cookie信息,否则不带cookie信息。

    * void setMaxAge( int expiry ):设置cookie的有效时间

      [ 正整数 ]:表示cookie保存在浏览器的缓存目录中(硬盘中),数值表示保存的时间。

      [ 负整数 ]:表示cookie的数据保存浏览器的内存中。浏览器关闭cookie就丢失了!

      [    零    ]:表示删除同名的cookie数据。

  • 相关阅读:
    探讨变量的内存分配方式
    色彩之RGB和灰阶
    Perl语言:qw简写
    【转】位操作
    [转]Perl学习笔记
    Spaghetti code&Ravioli code&Lasagna code&Spaghetti with meatballs
    交叉编译lsusb
    GCC,LLVM,Clang编译器对比
    如何判断自己是否到了该辞职的时候
    Javascript Array和String的互转换。
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5991112.html
Copyright © 2011-2022 走看看