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

  • 相关阅读:
    Python动态展示遗传算法求解TSP旅行商问题
    MOEAD算法中均匀权向量的实现---Python
    HDU 5294 多校第一场1007题 最短路+最小割
    POJ 3261 Milk Patterns sa+二分
    HDU 4292 FOOD 2012 ACM/ICPC Asia Regional Chengdu Online
    CodeForces 201A Clear Symmetry
    POJ 1679 The Unique MST 确定MST是否唯一
    POJ 3268 Silver Cow Party 最短路 基础题
    POJ 2139 SIx Degrees of Cowvin Bacon 最短路 水題
    POJ2229 Sumsets 基礎DP
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14816474.html
Copyright © 2011-2022 走看看