• 2019-04-12 cookie基础


    cookie

         作为web服务器,必须能够采用一种机制来唯一标识一个用户,同时记录该用户的状态

    会话cookie和持久化cookie

    cookie.setMaxAge(30) 设置cookie存在的时间

    如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览器会话期的cookie称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。

    若果过了设置的时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。

    存储在硬盘上的cookie可以在不不同的浏览器进程间共享,比如两个IE窗口,而对于保存在内存的cookie,不同的浏览器有不同的处理方式。

    利用cookie 自动登陆

    login.jsp

    1   <form action="index.jsp" method="post">
    2           name:<input type="text" name="name"/>
    3           <input type="submit" value="Submit">
    4      </form>

    index.jsp

     1     <%
     2         //若可以获取到请求的参数name,则打印出欢迎的信息,把登陆信息存储到Cookie中,并设置Cookie的最大时效30s
     3         String name = request.getParameter("name");
     4         if (name != null && !name.trim().equals("")) {
     5 
     6             Cookie cookie = new Cookie("name", name);
     7             cookie.setMaxAge(30);
     8             response.addCookie(cookie);
     9         } else {
    10             //从cookie中读取用户信息,若存在则打印欢迎信息
    11             Cookie[] cookies = request.getCookies();
    12             if (cookies != null && cookies.length > 0) {
    13                 for (Cookie cookie : cookies) {
    14                     String cookieName = cookie.getName();
    15                     if ("name".equals(cookieName)) {
    16                         String val = cookie.getValue();
    17                         name = val;
    18                     }
    19                 }
    20 
    21             }
    22 
    23         }
    24 
    25         if (name != null && !name.trim().equals("")) {
    26             out.print("hello: " + name);
    27         } else {
    28             //若既没有请求参数,也没有Cookie,则重定向到login.jsp
    29             response.sendRedirect("login.jsp");
    30         }
    31     %>

    利用cookie显示最近浏览的商品

    books.jsp

     1     <!-- 
     2         利用 Cookie 实现 "您浏览过的图书有: x, y, z", 只显示最近浏览的 3 本图书的信息
     3         且支持 Cookie 的持久化. 其余的 Cookie 被删除: 调用其 setMaxAge() 方法, 传入
     4         0 即可。
     5     -->
     6     
     7     
     8     <h4>Books Page</h4>
     9     
    10     <a href="book.jsp?book=JavaWeb">Java Web</a><br><br>
    11     <a href="book.jsp?book=Java">Java</a><br><br>
    12     <a href="book.jsp?book=Oracle">Oracle</a><br><br>
    13     <a href="book.jsp?book=Ajax">Ajax</a><br><br>
    14     <a href="book.jsp?book=JavaScript">JavaScript</a><br><br>
    15     <a href="book.jsp?book=Android">Android</a><br><br>
    16     <a href="book.jsp?book=Jbpm">Jbpm</a><br><br>
    17     <a href="book.jsp?book=Struts">Struts</a><br><br>
    18     <a href="book.jsp?book=Hibernate">Hibernate</a><br><br>
    19     <a href="book.jsp?book=Spring">Spring</a><br><br>
    20     
    21     <br><br>
    22     
    23     <% 
    24         StringBuilder books = new StringBuilder("");
    25     
    26         Cookie [] cookies = request.getCookies();
    27     
    28         if(cookies != null && cookies.length > 0){
    29             
    30             
    31             for(Cookie cookie: cookies){
    32                 String cookieName = cookie.getName();
    33                 String cookieVal = cookie.getValue();
    34                 
    35                 if(cookieName.startsWith("book_")){ 
    36                     books.append(cookieVal + "&nbsp;&nbsp;");
    37                 }
    38             }
    39             
    40         }
    41         
    42         if(!books.toString().equals("")){
    43             out.print("您浏览过的商品有: " + books.toString()); 
    44         }
    45     
    46     %>

    book.jsp

     1 <h4>Book Detail Page</h4>
     2     
     3     Book: <%= request.getParameter("book") %>
     4     
     5     <br><br>
     6     
     7     <a href="books.jsp">Return</a>
     8     
     9     <% 
    10         String book = request.getParameter("book");
    11         Cookie tempCookie = null;
    12         
    13         //只显示最近浏览过的 3 件商品. 
    14         
    15         //1. 获取所有满足条件的 Cookie
    16         List<Cookie> books = new ArrayList<Cookie>();
    17         
    18         Cookie [] cookies = request.getCookies();
    19     
    20         if(cookies != null && cookies.length > 0){
    21             
    22             
    23             for(Cookie cookie: cookies){
    24                 String cookieName = cookie.getName();
    25                 
    26                 if(cookieName.startsWith("book_")){ 
    27                     books.add(cookie);
    28                     
    29                     String cookieVal = cookie.getValue();
    30                     if(cookieVal.equals(book)){ 
    31                         tempCookie = cookie;
    32                     }
    33                 }
    34             }
    35             
    36         }
    37         
    38         if(books.size() == 5){
    39             if(tempCookie == null){
    40                 tempCookie = books.get(0);
    41             }
    42             
    43             tempCookie.setMaxAge(0);
    44             response.addCookie(tempCookie);
    45         }
    46         
    47         //2. 在数组 length == 3 的情况下, 把最早的那个(即数组的第 1 个元素-下标是 0 的那个元素)删除 
    48         Cookie cookie = new Cookie("book_" + book, book);
    49         response.addCookie(cookie);
    50     %>

    设置cookie的作用路径

    cookie的作用范围:可以作用当前目录和当前目录的子目录。但不能作用于当前目录的上一级目录。

    设置cookie的作用范围

    cookie.setPath(request.getContextPath());

    request.getContextPath() 这个是动态的代表web项目地址 如/day_3

    可以通过setPath方法来设置cookie的作用域,其中/代表站点的根目录。

  • 相关阅读:
    JSP中文乱码的一点研究
    Eclipse 导入外部项目无法识别为web项目并且无法在部署到tomcat下
    DOS命令学习
    Oracle学习笔记(一)
    登录时候的图片验证码的实现
    DIY随机数产生类
    使用VS2010建模
    Random快速连续产生不相同随机数
    魔兽争霸3冰封王座英雄以及兵种语言
    取两个地图坐标之间的距离
  • 原文地址:https://www.cnblogs.com/Codinginging/p/10699217.html
Copyright © 2020-2023  润新知