Cookie概念和API

Cookie概念

    Cookie在HTTP中它表示服务器送给客户端浏览器的小甜点。其实Cookie就是一个键和一个值构成的,随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器

    Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。客户端会保存Cookie,并会标注出Cookie的来源(哪个服务器的Cookie)。当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了!

     可以在页面右键点击检查或者按F12,点击应用程序,选择Cookie:

Cookie的API

创建Cookie

方法:

new 构造方法

 

Cookie cookie1 = new Cookie("username",user);
Cookie cookie2 = new Cookie("password",password);

注:如果服务器端发送重复的Cookie那么会覆盖原有的Cookie 。

 

保存至客户端浏览器

方法:

通过响应对象 addCookie(创建的cookie)

resp.addCookie(cookie1);
resp.addCookie(cookie2);

 

获取服务器端cookie内容  

方法:

请求对象.getCookies()

该方法返回的是一个Cookie数组,需要通过遍历才能获得想要的值。

Cookie[] cookies = request.getCookies();
    String username ="";
    String password ="";
    if(cookies.length > 0 && cookies != null){
        for(Cookie cookie:cookies){
            if(cookie.getName().equals("username")){
                username = cookie.getValue();
            }
            if(cookie.getName().equals("password")){
                password = cookie.getValue();
            }
        }
    }

设置路径 

方法:

cookie.setPath("路径")

  • 设置的路径必须与当前页面的路径匹配,否则浏览器将不会发送此Cookie。例如,如果Cookie的路径设置为/login,那么只有URL中包含/login路径的页面才能访问这个Cookie。
  • 子路径可以访问父路径的Cookie,但父路径不能访问子路径的Cookie。例如,如果Cookie的路径设置为/parent,那么/parent/child路径下的页面可以访问这个Cookie,但/child路径下的页面不能访问。

设置最大存活时间 

    Cookie的最大存活时间是指Cookie在客户端(如浏览器)上可以被存储和保留的最长时间。这个时间由Cookie的创建者(通常是Web服务器)在设置Cookie时指定,并受到浏览器和Web标准的限制。

默认存活时间: 会话级别, 浏览器关闭, 这个cookie就会被删除

方法:setMaxAge(int 参数)  单位: 秒

cookie1.setMaxAge(60*60*24*7);
cookie2.setMaxAge(60*60*24*7);

Cookie特征

cookie的key,value都是String类型

创建于服务器,保存在客户端浏览器上,不同浏览器之间cookie无法共享,不能跨浏览器

在之后的请求中,cookie以请求头的方式自动发送给服务器

实现功能 

通过以上内容,可以实现登录时的“记住我” 功能

import com.fs.entity.LoginInfo;
import com.fs.service.LoginService;
import com.fs.service.impl.LoginServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置post请求编码
        req.setCharacterEncoding("UTF-8");
//        resp.setContentType("text/html;charset=UTF-8");
        //拿到用户输入的验证码
        String yzm = req.getParameter("verifycode");

        //获得请求参数
        String user = req.getParameter("user");
        String password = req.getParameter("password");

        //调用service方法
        LoginService loginService = new LoginServiceImpl();
        LoginInfo loginInfo = loginService.login(user,password);

        if(loginInfo != null){//登录成功
            //先判断是否勾选“记住我”
            String rem = req.getParameter("rem");
            if(rem != null){
                //保存用户名密码
                Cookie cookie1 = new Cookie("username",user);
                Cookie cookie2 = new Cookie("password",password);
                //设置最大存活时间
                cookie1.setMaxAge(60*60*24*7);
                cookie2.setMaxAge(60*60*24*7);
                //设置路径
                cookie1.setPath("/");
                cookie2.setPath("/");
                resp.addCookie(cookie1);
                resp.addCookie(cookie2);
            }

            //重定向到index.html
            resp.sendRedirect("/index.jsp");


        }else{
            //转发到登录页面
            req.getRequestDispatcher("/login.jsp").forward(req,resp);

        }
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="zh-CN">
<head>
    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1"/>
    <title>管理员登录</title>

    <!-- 1. 导入CSS的全局样式 -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <!-- 2. jQuery导入,建议使用1.9以上的版本 -->
    <script src="js/jquery-2.1.0.min.js"></script>
    <!-- 3. 导入bootstrap的js文件 -->
    <script src="js/bootstrap.min.js"></script>
    <script type="text/javascript">

        function refreshCode(){
            const a = new Date().getTime();
            $("#vcode").attr("src","/checkCode?time="+a);
            console.log(a)
        }

    </script>
</head>
<body>
<%
//先获取cookie
    Cookie[] cookies = request.getCookies();
    String username ="";
    String password ="";
    if(cookies.length > 0 && cookies != null){
        for(Cookie cookie:cookies){
            if(cookie.getName().equals("username")){
                username = cookie.getValue();
            }
            if(cookie.getName().equals("password")){
                password = cookie.getValue();
            }
        }
    }
%>


<div class="container" style="width: 400px;">
    <h3 style="text-align: center;">管理员登录</h3>
    <form action="/login" method="post">
        <div class="form-group">
            <label for="user">用户名:</label>
            <input type="text" name="user" class="form-control" id="user" placeholder="请输入用户名" value="<%=username%>"/>
        </div>

        <div class="form-group">
            <label for="password">密码:</label>
            <input type="password" name="password" class="form-control" id="password" placeholder="请输入密码" value="<%=password%>"/>
        </div>

        <div class="form-inline">
            <input type="checkbox" name="rem" class="form-control" id="rem" value="rem"/>
            <label for="rem">记住我</label>
        </div>
        <div class="form-inline">
            <label for="vcode">验证码:</label>
            <input type="text" name="verifycode" class="form-control" id="verifycode" placeholder="请输入验证码"
                   style="width: 120px;"/>
            <a href="javascript:refreshCode()"><img src="checkCode" title="看不清点击刷新" id="vcode"/></a>
        </div>
        <hr/>
        <div class="form-group" style="text-align: center;">
            <input class="btn btn btn-primary" type="submit" value="登录">
        </div>
    </form>

    <!-- 出错显示的信息框 -->
    <div class="alert alert-warning alert-dismissible" role="alert">
        <button type="button" class="close" data-dismiss="alert">
            <span>&times;</span>
        </button>
        <strong>登录失败!</strong>
    </div>
</div>
</body>
</html>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值