zoukankan      html  css  js  c++  java
  • 14. javaEE

    在javax.servlet.http包下有个名为Cookie的类,通过该类就可以向客户端设置cookie数据了。

    cookie的创建:

    package cookie;
    
    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;
    
    
    public class cookie extends HttpServlet {
    
       
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //创建两个Cookie:
            //import javax.servlet.http.Cookie 导的是这个包
            //他就是以键 - 值得形式存在的啊
            Cookie cookie_1 = new Cookie("user", "bihu");
            Cookie cookie_2 = new Cookie("pass","a123456");
            
            //生成好了 接下来绑定到响应体中:
            response.addCookie(cookie_1);
            response.addCookie(cookie_2);
            
            //这样的话 用户GET请求页面 那么就会使用这两个Cookie!!
        }
    
        
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
        }
    
    }

    那么问题来了 ,我们可以在浏览器看到:

    不仅仅内容是显示在外头 而且 到期时间也仅关闭窗口,我们还可以看到 还有路径,那么我们该学会如何去保护这些 和 设置这些:

     

    设置绑定路径

    默认绑定:

    就是上面代码中的单纯设置Cookie 那么他会默认绑定路径,也就是途中看到的 /Cookie 如果你以后访问任何一个 : http://localhost:8080/Cookie/XXX,都会携带刚生成的Cookie,这就是默认绑定。

    自定义绑定:

    cookie除了默认绑定之外我们还可以手动设置其绑定路径:

    具体看代码函数:

    package cookie;
    
    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;
    
    
    public class cookie extends HttpServlet {
    
       
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //创建两个Cookie:
            //import javax.servlet.http.Cookie 导的是这个包
            //他就是以键 - 值得形式存在的啊
            Cookie cookie_1 = new Cookie("user", "bihu");
            Cookie cookie_2 = new Cookie("pass","a123456");
            
            //为Cookie绑定路径  你可以分开绑定 自定义的
            System.out.println(request.getContextPath());
            cookie_1.setPath(request.getContextPath() + "/bihu");
            cookie_2.setPath(request.getContextPath() + "/bihu");
            
            
            //生成好了 接下来绑定到响应体中:
            response.addCookie(cookie_1);
            response.addCookie(cookie_2);
            
            //这样的话 用户GET请求http://localhost:8080/Cookie/bihu/XXX页面 那么就会使用这两个Cookie!! 完全自定义的
        }
    
        
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
        }
    
    }

    其中  request.getContextPath(),返回当前页面所在的应用的名字,还有就是 默认的页面也可以用Cookie 我不知道为什么 但是其他不能,就是说 你绑定了路劲后,

    你访问的URL必须包含 :  xxxxx:8080:/ 你绑定的路劲 / 你绑定的路劲 / XXX;

    才有效 你自己可以用浏览器试试 或者 你用Fidder去抓包

    设置cookie的有效时长
    默认情况下, Cookie 是保存在浏览器的缓存中的,关闭浏览器后Cookie也就消失了。
    开发者可以通过设置Cookie的有效时长,将Cookie写入到客户端硬盘文件中。
    可以通过下面的方法设置有效时长


    public void setMaxAge(int expiry)

    其中expiry的单位为秒,整型。

    参数取值特性:

    • 大于 0,则表示要将 Cookie 写入到硬盘文件中;
    • 小于 0,则表示 Cookie 存放在浏览器缓存中,与不设置时长等效;
    • 等于 0,则表示 Cookie产生后直接失效。

      

      注意可以设置cookie的值 ,用 Cookie 类中的 setvalue

      也可以重复添加cookie,但会替代之前的。

    代码:

    package cookie;
    
    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;
    
    
    public class cookie extends HttpServlet {
    
       
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //创建两个Cookie:
            //import javax.servlet.http.Cookie 导的是这个包
            //他就是以键 - 值得形式存在的啊
            Cookie cookie_1 = new Cookie("user", "bihu");
            Cookie cookie_2 = new Cookie("pass","a123456");
            
            //设置cookie的有效时长:
            //public void setMaxAge(int expiry) 方法:
            /*
                * 大于 0,则表示要将 Cookie 写入到硬盘文件中;
                 *小于 0,则表示 Cookie 存放在浏览器缓存中,与不设置时长等效;
                    *等于 0,则表示 Cookie产生后直接失效。
              */    
            cookie_1.setMaxAge(60 * 60 * 24 * 15);    // 60 * 60 * 24 * 15 就是15天  注意的是 别设置几秒或几千秒 没用的啊 浏览器他不会计算的
            cookie_2.setMaxAge(60 * 60 * 24 * 15);
            
            
            //生成好了 接下来绑定到响应体中:
            response.addCookie(cookie_1);
            response.addCookie(cookie_2);
            
            //这样的话 用户GET请求http://localhost:8080/Cookie/bihu/XXX页面 那么就会使用这两个Cookie!! 完全自定义的
        }
    
        
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
        }
    
    }

    设置路径 和 日期我都讲了啊  至于加密 你自己去加密 但推荐Cookie别带中文!!!!

    接下来我们学习如何获取啊 获取Cookie:

    服务器端获取请求的cookie

    HttpServletRequest 中有一个方法getCookies()专门用于读取请求中所携带的 Cookie 数据,该方法的返回值类型是Cookie数组

    比如:携带cookie时即可访问 但是注意的是:没cookie时你别去获取 ,不然cookie 会为空 ,会空指针异常:

    代码:

    package Accept;
    
    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;
    
    
    public class AcceptCookie extends HttpServlet {
        
       
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //注意!确保访问AcceptCookie时 浏览器是携带者Cokkie的 不然为空的话会报空指针异常!!
            //用HttpServletRequest类种的 getCookies 方法来获取Cookie对象数组
            Cookie[] mCookie = request.getCookies();
            
            //获取好了 我们来遍历一下获取到的 Cookie:
            for(Cookie c : mCookie) {
                System.out.println("Cookie Name :" + c.getName());
                System.out.println("Cookie Velue :" + c.getValue());
                System.out.println("Cookie Time :" + c.getMaxAge() + "  S");
                System.out.println("Cookie Domain :" + c.getDomain());        //获取域
                System.out.println("Cookie Path :" + c.getPath());        //获取路径
                System.out.println("---------------------------------");
            }
            
            
            
        }
    
        
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
        }
    
    }

    我们打印下遍历结果: 都很准确的啊 更多的自己百度即可:

    Cookie Name :user
    Cookie Velue :bihu
    Cookie Time :-1 S
    Cookie Domain :null
    Cookie Path :null
    ---------------------------------
    Cookie Name :pass
    Cookie Velue :a123456
    Cookie Time :-1 S
    Cookie Domain :null
    Cookie Path :null
    ---------------------------------

    练习

    1.实现获取用户上一次访问时间的功能,即当用户访问服务器,如果是非第一次访问的话,需要将上一次访问服务器的时间给用户显示出来。

    2.实现十天内免登陆的功能,当用户成功登陆后,十天内可以自动登录。用户名和密码直接写在代码中即可。

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14816474.html

  • 相关阅读:
    【CF1043C】Smallest Word(构造)
    【CF1043B】Lost Array(枚举)
    【CF1043A】Elections(签到)
    【Codeforces Round #519】
    【HDOJ5556】Land of Farms(最大团)
    【HDOJ1828&&POJ1177】Picture(线段树,扫描线)
    【SPOJ61】Brackets(线段树)
    lgy -oracle
    虚拟机软件VMware Workstation Pro的安装与使用
    [技巧] 解决Win7下VMware中vmx86.sys报错的问题
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14816474.html
Copyright © 2011-2022 走看看