JSP中的Cookie

Posted XiaoFanMi

tags:

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

Cookie概念

通过cookie对象,可以从服务器端向客户端响应一些信息,这些信息可以存储在浏览器的内存中,浏览器关闭,数据就不存在.

可以给cookie中的信息设置有效时间,就可以保存在电脑硬盘上,到期后自动删除

Cookie是保存在客户端的小文本,保存的位置分两种

–Cookie可以保存在客户端浏览器的所占内存中,关闭浏览器后,Cookie就不再存在。

–Cookie也可以保存在客户PC机的硬盘上,设置有效时间,超过有效时间后失效。

在ServletAPI中,存在类Cookie,可以使用new关键字创建cookie对象

方法名称说 明
setMaxAge(int expiry)设置Cookie的有效期,以秒为单位,Cookie保存在硬盘上,否则保存在内存中
setValue(String value)在Cookie创建后,对Cookie进行赋值
getName()获取Cookie的名称
getValue()获取Cookie的值
getMaxAge()获取Cookie的有效时间,以秒为单位

可以用来记住密码,简化登录

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

@WebServlet(name = "login", urlPatterns = "/login")
public class servlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        PrintWriter out = resp.getWriter();
        try {
            String account = req.getParameter("account");
            String password = req.getParameter("password");
            String ck = req.getParameter("ck");//是否记住账户密码的标记
            if (checkDao.link(account, password)) {
                if (ck != null) {
                    //创建cookie对象,封装数据,tomcat9之后可以直接存储中文
                    Cookie acccok = new Cookie("acccok", account);
                    Cookie pwdcok = new Cookie("pwdcok", password);
                    acccok.setMaxAge(3600 * 24 * 7);
                    pwdcok.setMaxAge(3600 * 24 * 7);
                    resp.addCookie(acccok);
                    resp.addCookie(pwdcok);
                }
                //在servlet中获取session
                HttpSession session = req.getSession();//从请求对象中获得与之对应的session
                session.setAttribute("account", account);
                resp.sendRedirect("success.jsp");
                out.print("登陆成功");
            } else {
                req.setAttribute("msg", "账户或密码错误");
                resp.sendRedirect("login.jsp");
            }
        } catch (Exception e) {
            e.printStackTrace();
            resp.sendRedirect("500.jsp");//只跳转页面,不进行数据的传输
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getSession().invalidate();
        resp.sendRedirect("login.jsp");
    }
}

通过java获取cookie中的账户和密码实现记住密码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script src="js/jquery.1.8.3.min.js" type="text/css"></script>
    <script type="text/css">
    </script>
</head>
<body>
<%--
    在login.jsp页面中有两种方式获得cookie中的数据
    1.在服务器端 java

    2.在浏览器中  js
--%>
    
<%-- 在服务器端 java --%>
<%
    String account = "";
    String password = "";
    Cookie[] cookies = request.getCookies();
    if (cookies != null){
        for (Cookie cookie:cookies ) {
            if (cookie.getName().equals("acccok")){
                account = cookie.getValue();
            }if (cookie.getName().equals("pwdcok")){
                password = cookie.getValue();
            }
        }
    }
%>
    <form action="login " method="post">
        账户:<input type="text" name="account" value="<% out.print(account); %>"><br>
        密码:<input type="password" name="password" value="<% out.print(password); %>"> <br>
        <input type="submit" value="登录">
        记住密码:<input type="checkbox" name="ck" value="ck">
    </form>
</body>
</html>

在浏览器中 js 获取cookie中的账户和密码实现记住密码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script src="js/jquery.1.8.3.min.js" type="text/css"></script>
    <script>
        $(function () {
            var arr = document.cookie.split(";");
            for (let i = 0; i < arr.length; i++) {
                var str = arr[i];
                var strarr = str.split("=");
                if (strarr[0] == "acccok") {
                    $("#acountId").val(strarr[1]);
                }
                if (strarr[0].trim() == "pwdcok") {
                    $("#passwordId").val(strarr[1]);
                }
            }
        })
    </script>
</head>
<body>
<%out.print(request.getAttribute("msg"));%>
<form action="login " method="post">
    账户:<input type="text" name="account" value="" id="acountId"><br>
    密码:<input type="password" name="password" value="" id="passwordId"> <br>
    <input type="submit" value="登录">
    记住密码:<input type="checkbox" name="ck" value="ck">
</form>
</body>
</html>

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

JSP开发中的基础语法

JSP中的Cookie

js代码片段: utils/lcoalStorage/cookie

JSP中的Cookie对象

JSP中的Cookie

XSS:如何从 C# 中的字符串中删除 JS 片段?