浩浩学编程JavaWeb-04Cookie

    科技2026-01-20  11

    cookie

    目录结构

    cookie1.基本概念3.常用方法4.Cookie 和 Session 的区别session: 保存在服务器, 数据为 Objectcookie: 5.登录案例

    1.基本概念

    Cookie是存储在浏览器里面的一个东西,不属于JSP内置对象,是一个全新的内容。

    每个浏览器只有一个属于自己的 cookie,默认关闭浏览器即失效

    实现会话的一种机制,Cookie存储在客户端/浏览器,seeion存储在服务端。

    Cookie 是服务端在 HTTP 响应中附带传给浏览器的⼀个⼩⽂本⽂件,⼀旦浏览器保存了某个 Cookie,在之后的请求和响应过程中,会将此 Cookie 来回传递,这样就可以通过 Cookie 这个载体完成客户端和服务端的数据交互。

    用 key-value 的方式存储。 <% Cookie cookie = new Cookie("name","haoqi"); response.addCookie(cookie); %>

    获取cookie <% // Cookie cookie = new Cookie("name","haoqi"); // response.addCookie(cookie); //读取cookie Cookie[] cookies = request.getCookies(); //一次性获取所有的cookie,用cookie数组存放 for (Cookie c : cookies){ out.write(c.toString()+"<br/>"); out.write(c.getName()+"<br/>"); //读取key out.write(c.getValue()+"<br/>"); //读取value out.write("------------"+"<br/>"); } %>

    创建cookie2.jsp

    <% Cookie cookie = new Cookie("name","dapeng"); //注意此处改为 dapeng response.addCookie(cookie); %>

    原来的haoqi在客户端访问cookie2的时候变成dapneg·

    Cookie[] cookies=request.getCookies(); out.write(cookies[0].getMaxAge());//?输出一个奇怪的符号 System.out.println(cookies[0].getMaxAge());//-1 默认值 直到浏览器关闭

    3.常用方法

    void setMaxAge(int age) 设置 Cookie 的有效时间,单位为秒

    int getMaxAge() 获取 Cookie 的有效时间

    String getName() 获取 Cookie 的 name

    String getValue() 获取 Cookie 的 value

    4.Cookie 和 Session 的区别

    session: 保存在服务器, 数据为 Object

    会随着会话而销毁,保存重要的信息

    **例如:**账号密码信息,如果保存在cookie,能通过cookie的本地文件获取到

    cookie:

    保存在浏览器

    保存的数据是 String

    可以⻓期保存在浏览器中,⽆会话⽆关

    保存不重要信息 **例如:**视频观看记录,再次打开上一次没看完的视频时会从断点处播放

    session:

    setAttribute(“name”,“admin”) 存

    getAttribute(“name”) 取

    ⽣命周期:

    服务端:只要 WEB 应⽤重启就销毁,

    客户端:只要浏览器关闭就销毁。

    退出登录: session.invalidate()

    cookie:

    response.addCookie(new Cookie(name,“admin”)) 存

    ⽣命周期:

    不随服务端的重启⽽销毁,

    客户端:默认是只要关闭浏览器就销毁,我们通过 setMaxAge()⽅法设置有效期,⼀旦设置了有效期,则不随浏览器的关闭⽽销毁,⽽是由设置的时间来决定。

    退出登录: setMaxAge(0)

    取:

    Cookie[] cookies=request.getCookies();//一次性获取所有的cookie,用cookie数组存放 for (Cookie cookie:cookies){ //只能通过遍历+条件判断的方式获取 if (cookie.getName().equals("name")) out.write("用户名:"+cookie.getValue()+"<br/>"); }

    5.登录案例

    描述:用cookie实现用户登录验证,使浏览器能够保存用户信息,即关闭浏览器再回到 welcome 界面时能够正常显示,并实现登出功能,即销毁session.

    cookieLogin.jsp 登陆界面 <%-- Created by IntelliJ IDEA. User: haoqi Date: 2020/10/6 Time: 22:42 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>cookieLogin</title> </head> <body> <form action="/cookielogin" method="post"> <table> <tr> <td>用户名:</td> <td><input type="text" name="username"></td> </tr> <tr> <td>密码:</td> <td><input type="password" name="password"></td> </tr> <tr> <td><input type="submit" value="登录"></td> <td><input type="reset" value="重置"></td> </tr> </table> </form> </body> </html> CookieLoginServlet.java 登录验证 用户名和密码 package com.hou.session; 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; /** * @author haoqi * @Date 2020/10/6 - 22:47 */ @WebServlet("/cookielogin") public class CookieLoginServlet extends HttpServlet { private String myUsername = "haoqi"; private String myPassword = "123"; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); } //表单提交时post请求 @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); String password = req.getParameter("password"); if (username.equals(myPassword) && password.equals(myPassword)){ Cookie cookie1 = new Cookie("name",username); Cookie cookie2 = new Cookie("password",password); cookie1.setMaxAge(60*60*24);//生命周期设为1day cookie2.setMaxAge(60*60*24); resp.addCookie(cookie1); resp.addCookie(cookie2); resp.sendRedirect("cookieWelcome.jsp"); } else resp.sendRedirect("cookieLogin.jsp"); } } cookieWelcome.jsp 欢迎界面 <%-- Created by IntelliJ IDEA. User: haoqi Date: 2020/10/6 Time: 22:53 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>welcome</title> </head> <body> <h1>欢迎回来</h1> <% Cookie[] cookies=request.getCookies();//一次性获取所有的cookie,用cookie数组存放 for (Cookie cookie:cookies){ //只能通过遍历+条件判断的方式获取 if (cookie.getName().equals("name")){ out.write("用户名:"+cookie.getValue()+"<br/>"); } if (cookie.getName().equals("password")){ out.write("密 码:"+cookie.getValue()+"<br/>"); } } %> <a href="cookeilogout"> 推出登录</a> </body> </html> CookieLogoutServlet.java 登出界面 与 CookieLoginServlet.java 内容相同,注意注解

    Processed: 0.019, SQL: 9