JavaWeb学习——Cookie与JSP

Posted Cardiolith

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb学习——Cookie与JSP相关的知识,希望对你有一定的参考价值。

一、Cookie简介

     Cookie 指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据

     Cookie 是由 Web 服务器保存在用户浏览器上的小文本文件,它包含有关用户的信息。

     Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时      间是短暂的。硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存在时间,可分        为非持久Cookie和持久Cookie。

 

二、Cookie的常用方法

方法 描述
Cookie(String name, String value) 实例化对象,传入cookie的名称和值
public String getName() 获取Cookie对象的名称
public String getValue() 获取Cookie对象的值
public void setValue(String value) 设置Cookie的值
public void setMaxAge(int expiry) 设置Cookie的有效期,如果不设置,有效期为一次对话。
public int getMaxAge() 获取Cookie的有效期
public void setPath(String url) 设置Cookie的有效路径,即访问url之外的资源检测不到这个cookie
public String getPath() 获取Cookie的有效路径
public void setDomain(String pattern) 设置Cookie的有效域,多个网站可以使用一个Cookie
public Strinng getDomain() 获取Cookie的有效域

     response接口也中定义了一个addCookie方法,它用于在其响应头中增加一个相应的Set-Cookie头字段。 同样,request接口中也定义了一个getCookies方法,它用于获取      客户端提交的Cookie。

 

三、实例(用户登录)

     以Cookie来保存用户登录的用户名和密码:

 1 <!-- login.jsp-->
 2 <html>
 3   <body>
 4   <%
 5       String username="", password="";  //创建两个存储username和password的对象
 6       
 7       Cookie[] cookies = request.getCookies();  //获取客户端保存的cookie数组
 8       if(cookies!=null&&cookies.length>0){  //检测cookies是否为空
 9           for(Cookie c: cookies){
10               if(c.getName().equals("username")){
11                   username = URLDecoder.decode(c.getValue(),"utf-8");  //获取cookies中的中文数据,需要使用URLDecoder类的decode方法进行中文解码
12               }     
13               if(c.getName().equals("password")){
14                   password = URLDecoder.decode(c.getValue(),"utf-8");
15               }
16           }
17       }
18    %>
19     <h1>用户登录</h1>
20     <%@include file="date.jsp"%><%--include指令 --%>
21     <jsp:include page="date.jsp" flush="false" /> <%--include动作 --%>
22     <hr>
23     <form action="doLogin.jsp" name="LoginForm" method="post">
24       <table>
25         <tr>
26           <td>用户名:</td>
27           <td><input type="text" name="username" value="<%=username %>"></td>
28         </tr>
29         <tr>
30           <td>密码:</td>
31           <td><input type="password" name="password" value="<%=password %>"></td>
32         </tr>
33         <tr>
34           <td colspan="2"><input type="checkbox" name="isUseCookie" checked="checked">是否保存用户信息</td>
35         </tr>
36         <tr>
37           <td colspan="2" text-align="center"><input type="submit" value="登录"></tr>
38         </tr> 
39       </table>
40     </form>
41   </body>
42 </html>
<!-- doLogin.jsp -->
<html>  
  <body>
    <%
        request.setCharacterEncoding("utf-8");
        String[] isUseCookies = request.getParameterValues("isUseCookie");
        //首先判断用户是否选择保存信息
        if(isUseCookies!=null&&isUseCookies.length>0){  
            //使用URLEncoder类中的encoder方法解决中文乱码问题
            String username = URLEncoder.encode(request.getParameter("username"),"utf-8");
            String password = URLEncoder.encode(request.getParameter("password"),"utf-8");
            
            Cookie usernameCookie = new Cookie("username",username);  //创建Cookie
            Cookie passwordCookie = new Cookie("password",password);
            
            usernameCookie.setMaxAge(86400);  //设置Cookie最大有效期
            passwordCookie.setMaxAge(86400);
           
            response.addCookie(usernameCookie);  //写入Cookie
            response.addCookie(passwordCookie);
        }else{      
            Cookie[] cookies = request.getCookies();
            if(cookies!=null&&cookies.length>0){
                for(Cookie c: cookies){
                    if(c.getName().equals("username")||c.getName().equals("password")){
                        c.setMaxAge(0);  //设置cookie失效
                        response.addCookie(c);  //重新保存
                    }     
                }
            }
        }   
        
     %>
    <h1>登陆成功</h1>
    <hr>
    <a href="users.jsp">点击查看用户信息</a>
  </body>
</html>

 

四、Cookie与Session对比

  Cookie Session
存储位置 在客户端保存用户信息 在服务器端保存用户信息
数据类型 保存类型是String 保存类型是Object
有效期 长期保存在客户端 随会话结束而销毁
信息安全 保存不重要信息 保存重要信息

 

五、Cookie的缺陷

  • Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。
  • 由于在HTTP请求中的Cookie是明文传递的,所以安全性成问题。(除非用HTTPS)
  • Cookie的大小限制在4KB左右。对于复杂的存储需求来说是不够用的。

 

--- 每天积累一点点,吃水不忘挖井人 ---

以上是关于JavaWeb学习——Cookie与JSP的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb之会话技术

java web学习目录

JavaWeb学习笔记(狂神版)--- 第九节 Cookie与Session

JAVAWEB开发之JSPEL及会话技术(Cookie和Session)的使用详解

JavaWeb从零到一会话技术Cookie&Session&JSP

JavaWeb学习笔记