zoukankan      html  css  js  c++  java
  • cookie机制

    Cookie通过在客户端记录信息确定用户身份

    一个用户的所有请求操作都应该属于同一个会话

    HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话

    cookie机制:

    客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

    注意:

    (1)Cookie具有不可跨域名性

      (2)Cookie的有效期

    Cookie的maxAge决定着Cookie的有效期,单位为秒(Second)。Cookie中通过getMaxAge()方法与setMaxAge(int maxAge)方法来读写maxAge属性。

    如果maxAge属性为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。无论客户关闭了浏览器还是电脑,只要还在maxAge秒之前,登录网站时该Cookie仍然有效。下面代码中的Cookie信息将永远有效。


    Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie

    cookie.setMaxAge(Integer.MAX_VALUE);           // 设置生命周期为MAX_VALUE

    response.addCookie(cookie);                    // 输出到客户端


    如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。maxAge为负数的Cookie,为临时性Cookie,不会被持久化,不会被写到Cookie文件中。Cookie信息保存在浏览器内存中,因此关闭浏览器该Cookie就消失了。Cookie默认的maxAge值为–1。

    如果maxAge为0,则表示删除该Cookie。Cookie机制没有提供删除Cookie的方法,因此通过设置该Cookie即时失效实现删除Cookie的效果。失效的Cookie会被浏览器从Cookie文件或者内存中删除,


    例如:

    Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie

    cookie.setMaxAge(0);                          // 设置生命周期为0,不能为负数

    response.addCookie(cookie);                    // 必须执行这一句


    response对象提供的Cookie操作方法只有一个添加操作add(Cookie cookie)。

    要想修改Cookie只能使用一个同名的Cookie来覆盖原来的Cookie,达到修改的目的。删除时只需要把maxAge修改为0即可。


    注意:从客户端读取Cookie时,包括maxAge在内的其他属性都是不可读的,也不会被提交。浏览器提交Cookie时只会提交name与value属性。maxAge属性只被浏览器用来判断Cookie是否过期。

     

    (3)Cookie的修改、删除

    Cookie并不提供修改、删除操作。如果要修改某个Cookie,只需要新建一个同名的Cookie,添加到response中覆盖原来的Cookie。

    如果要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆盖原来的Cookie。注意是0而不是负数。负数代表其他的意义。读者可以通过上例的程序进行验证,设置不同的属性。


    注意:修改、删除Cookie时,新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样。否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。

     

    例子:

    servlet:

    package com.bjsxt.cookie.servlet;

    import java.io.IOException;

    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;


    /**
     * Cookie:是一个类,
     * 由Servlet创建,并返回少量信息给客户端浏览器并保存
     *  如何给cookie设置存活时间,用jeansCookie.setMaxAge(3600*24*3);//存活时间为3天
     *    保存地点
     *       如果设置了存活时间,将cookie信息对象保存在电脑硬盘上,一旦时间一到,自动销毁
     *       如果没有设置存活时间,将保存在浏览器内存中,一旦浏览器关闭,cookie信息销毁
     *       
     *    怎样查看cookie的存活时间:看Expires属性
     *    怎样查看cookie的访问路径:看Path属性
     *  为了让cookie信息访问 变得合理,可以对cookie对象设置访问机制(url)
     *
     *  cookie技术依赖于客户端---》跟服务器tomcat是没有关系的
     *  
     *  怎样获取到前台传递过来的cookie信息?
     *  
     * @author Administrator
     *
     */
    public class CookieServlet extends HttpServlet {
        
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //创建cookie信息对象
            Cookie  clothesCookie=new Cookie("clothes", "KA MA");
            Cookie  jeansCookie=new Cookie("jeans", "YiShion");
            Cookie  shoesCookie=new Cookie("shoes", "Nike");
            
            
            //****:对jeansCookie  cookie对象设置存活时间
            jeansCookie.setMaxAge(3600*24*3);//存活时间为3天
            
            //***:动态的设置cookie的访问路径
            shoesCookie.setPath(req.getContextPath()+"/car");//  "/car"相当于“/car*”
            
            //将cookie返回给客户端
            resp.addCookie(clothesCookie);
            resp.addCookie(jeansCookie);
            resp.addCookie(shoesCookie);
        }

    }

    One who want to wear the crown. Bear the crown.
  • 相关阅读:
    Nginx反向代理和jetty服务器配置
    如何使用canvas绘图
    毕业后,你折腾了多久做了多少努力才找到正确的方向或者道路?
    如何提高用户逃离成本
    首次创业者必须知道哪些基本常识?
    拦截器、过滤器、监听器各有什么作用
    第一人称入行分享贴:大学混了四年,如何顺利入行互联网
    线下学习
    如何实现数组深拷贝和浅拷贝?
    从零学前端第二讲:CSS行内块级元素布局与定位
  • 原文地址:https://www.cnblogs.com/z0228-0322x/p/6165911.html
Copyright © 2011-2022 走看看