Cookie

声明

本文部分内容参考自其他作者原创文章,仅供个人学习留档,特此声明

参考文章链接

(3条消息) 【狂神】JavaWeb笔记_码畜也有梦想的博客-CSDN博客_狂神javaweb笔记

Servlet Cookie 处理 | 菜鸟教程 (runoob.com)

Cookie

Servlet Cookie 处理 | 菜鸟教程 (runoob.com)


1、代码

1.新建 CookieDemo01 类

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

public class CookieDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //服务器告诉你,你来的时间,把这个时间封装成为一个信件,你下次带来,我就知道你来了
        //解决中文乱码
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        PrintWriter out = resp.getWriter();

        //Cookie,服务器从客户端获取;
        Cookie[] cookies = req.getCookies(); //这里返回数组,说明Cookie可能存在多个

        //判断cookie是否存在
        if (cookies != null){
            //如果存在,就获取
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie = cookies[i];
                //获取cookie的名字(键)
                if (cookie.getName().equals("lastLoginTime")) {
                    //获取cookie的值(值)
                    String lastLoginTime = cookie.getValue();
                    Date date = new Date(Long.parseLong(lastLoginTime));
                    out.write("您上次访问本站的时间是:" + date.toLocaleString());
                }
            }
        } else {
            out.write("这是您第一次访问本站");
        }
        //服务器给客户端响应一个cookie,一个cookie就是一个键值对
        Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");
        cookie.setMaxAge(24*60*60);//设置cookie有效期为一天
        resp.addCookie(cookie);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

2.用于注册映射路径的web.xml代码

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">

    <servlet>
        <servlet-name>cookie01</servlet-name>
        <servlet-class>com.xy.servlet.CookieDemo01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>cookie01</servlet-name>
        <url-pattern>/cookie01</url-pattern>
    </servlet-mapping>


</web-app>

3.用于添加依赖和防止打包不全的pom.xml代码

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.xy</groupId>
  <artifactId>javaweb-cookie-session</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.3</version>
      <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
      </resource>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>true</filtering>
      </resource>
    </resources>
  </build>
</project>

2、代码测试

  • 获取 name 为 lastLoginTime 的Cookie并写入网页

  • 服务器给客户端响应一个cookie resp.addCookie(cookie);


3、遇到的问题(解决)

1.网页显示乱码问题

解决方式为在 CookieDemo01 代码中添加以下代码

req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");

2.获取Cookie问题

请求获取Cookie以后一定要返回一个数组,因为Cookie一般存在多个

Cookie[] cookies = req.getCookies();

4、知识点总结

1. 总结练习过程

其实上边的练习总的来讲就是经历了以下过程

  1. 从请求中拿到 cookie 信息
  2. 服务器响应给客户端 cookie
Cookie[] cookies = req.getCookies(); //获得Cookie
cookie.getName(); //获得cookie中的key
cookie.getValue(); //获得cookie中的vlaue
new Cookie("lastLoginTime", System.currentTimeMillis()+""); //新建一个cookie
cookie.setMaxAge(24*60*60); //设置cookie的有效期
resp.addCookie(cookie); //响应给客户端一个cookie

cookie:一般会保存在本地的 用户目录下 appdata;


2. Cookie上限问题

一个网站cookie是否存在上限!聊聊细节问题

  • 一个 Cookie 只能保存一个信息;
  • 一个 web 站点可以给浏览器发送多个 cookie,最多存放 20 个 cookie;
  • Cookie 大小有限制 4kb;
  • 浏览器上限:300 个 cookie

3. 删除Cookie的方法

删除 Cookie:

  • 不设置有效期,默认为关闭浏览器后Cookie自动失效;
  • 设置有效期时间为 0

cookie.setMaxAge(MaxAge),如果 maxAge 为负数,则表示该 Cookie 仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该 Cookie 即失效。maxAge 为负数的 Cookie为临时性 Cookie,不会被持久化,不会被写到 Cookie 文件中。Cookie 信息保存在浏览器内存中,因此关闭浏览器该 Cookie 就消失了。Cookie 默认的maxAge值为-1。

如果 maxAge 为 0 ,则表示在 resp.addCookie(cookie); 操作之后立马删除该 Cookie。

posted @   无关风月7707  阅读(74)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示