Cookie的相关基础知识

http协议的无状态性

无状态是指,当浏览器发送请求给服务器的时候,服务器响应客户端请求。

但是当同一个浏览器再次发送请求给服务器的时候,服务器并不知道它就是刚才那个浏览器。

简单的说,就是服务器不会去记得你,所以就是无状态协议。

Cookie概述

保存用户的状态的两大机制

Session

Cookie

 

什么是cookie?

Cookie是web服务器保存在客户端的一系列文本信息。

典型应用一、登陆时记住密码

典型应用二、记录客户所浏览过的商品

 

看视频的时候,视频软件会记录已经浏览过的视频

 

Cookie的作用

  1. 对特定对象的追踪
  2. 保存用户网页浏览记录与习惯
  3. 简化登陆

 

安全风险:容易泄露用户信息

 

在JSP页面中创建与使用cookie

创建cookie对象

Cookie cookie = new Cookie(String key,Object value);

写入Cookie对象

Response.addCookie(cookie);

读取Cookie对象

Cookie[] cookies = request.getCookies();

 

常用方法:

方法

说明

Void setMaxAge(int expiry)

设置cookie的有效期,以秒为单位

Void setValue(String value)

在cookie创建好后,对cookie进行赋值

String getName()

获取cookie的名称

String getValue()

获取cookie的值

Int getMaxAge()

获取cookie的有效时间,以秒为单位

 

 

Cookie在登陆中的应用

JSP中创建与使用cookie

实现记忆用户名和密码功能

uploading.4e448015.gif转存失败重新上传取消

 

 

案例:

在login.jsp中输入:

<%

       String username = "";

       String password = "";

      

       Cookie[] cookies = request.getCookies();

       for(Cookie c : cookies){

              if(c.getName().equals("username")){

                     username = URLDecoder.decode(c.getValue(),"utf-8");

              }

              if(c.getName().equals("password")){

                     password = URLDecoder.decode(c.getValue(),"utf-8");

              }

       }

%>

<form action="dologin.jsp" method="post">

       <table>

              <tr>

                     <td>用户名:</td>

                     <td><input type="text" name="username" value="<%=username%>"></td>

              </tr>

              <tr>

                     <td>密码:</td>

                     <td><input type="password" name="password" value="<%=password%>"></td>

              </tr>

              <tr>

                     <td colspan="2"><input type="checkbox" checked="checked" name="isCookie" value="true">记住密码</td>

              </tr>

              <tr>

                     <td colspan="2"><input type="submit" value="登陆"></td>

              </tr>

       </table>

</form>

 

在dologin.jsp中输入:

<%

       request.setCharacterEncoding("utf-8");

       String isCookie = request.getParameter("isCookie");

       String username = URLEncoder.encode(request.getParameter("username"), "utf-8");

       String password = URLEncoder.encode(request.getParameter("password"), "utf-8");

      

       if(isCookie != null){ //用户勾选了保存密码

              Cookie usernameCookie = new Cookie("username",username); //创建cookie

              Cookie passwordCookie = new Cookie("password",password);

             

              usernameCookie.setMaxAge(60);//设置cookie的有效期

              passwordCookie.setMaxAge(60);

             

              response.addCookie(usernameCookie);

              response.addCookie(passwordCookie);

       }else{ //用户没有勾选,需要将之前保存了密码的信息也给删掉

              Cookie[] cookies = request.getCookies();

              for(Cookie c : cookies){

                     if(c.getName().equals("username") || c.getName().equals("password")){

                            c.setMaxAge(0); //设置cookie 失效

                            response.addCookie(c); //重新保存cookie

                     }

                    

              }

       }

%>

<h5>登陆成功!</h5>

<a href="main.jsp">查看用户信息!</a>

 

在main.jsp中输入:

<%

       String username = "";

       String password = "";

      

       Cookie[] cookies = request.getCookies();

       for(Cookie c : cookies){

              if(c.getName().equals("username")){

                     username = URLDecoder.decode(c.getValue(),"utf-8");

              }

              if(c.getName().equals("password")){

                     password = URLDecoder.decode(c.getValue(),"utf-8") ;

              }

       }

%>

 

用户名:<%=username %><br>

密码:<%=password %>

 

Session与cookie的对比

Session

Cookie

在服务器端内存中保存用户信息

在客户端保存用户信息

Session中保存的时Object类型

Cookie保存的时String类型

随会话的结束而将其存储的数据销毁

Cookie可以长期保存在客户端

保存重要的信息

保存不重要的信息

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值