javaweb会话技术-----cookie技术

request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据

方法:

  • void setAttribute(String name,Object obj):存储数据

  • Object getAttitude(String name):通过键获取值

  • void removeAttribute(String name):通过键移除键值对

客户端会话技术

就是将共享数据保存到浏览器

Cookie的常用方法

创建Cookie new Cookie(key,value)

发送Cookie response.addCookie(Cookie)

获取Cookie request.getCookies()

 

Cookie的其他事项

  1. 可以有多个Cookie吗?

    • 可以有多个

  2. Cookie可以持久化吗?

    • Cookie默认的有效时间是一次会话

    • 可以使用setMaxAge()去设置Cookie的有效时间

      • 当参数为负数时就是默认存活时间(一次会话)

      • 当参数为0时表示删除该Cookie

      • 当参数为正整数时就代表存活的秒数

  3. 有乱码吗?

    • 在Tomcat8及以上的版本中可以携带中文的cookie,但是不能有特殊字符

    • URL编码及解码的机制

      • value = URLEncoder.encode(value, "utf-8");// 编码
      • value = URLDecoder.decode(value, "utf-8");// 解码

Cookie的特点

  1. 将数据存储到浏览器,由浏览器对Cookie进行维护

  2. Cookie的大小和个数受限,不同浏览器有所区别,Cookie保存的数据不能超过4095个字节,50个/每个域名

  3. Cookie安全性不够高,所有的Cookie都是以纯文本的形式记录于文件中,因此如果要保存用户名密码等信息时,最好事先经过加密处理。

复制代码
package com.gton.servlet.servlet;

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;

/**
 * @program: javaweb-tomcat
 * @description:
 * @author: GuoTong
 * @create: 2020-09-15 10:01
 **/
@WebServlet(urlPatterns = {"/cookie"}, loadOnStartup = 1)
public class CookieServlet extends HttpServlet {

    /*会话技术Cookie技术:基于浏览器存储共享数据*/
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

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

resp.setContentType(
"text/html;charset=utf-8"); resp.setCharacterEncoding("UTF-8"); req.setCharacterEncoding("UTF-8");
  String username ="汤姆";
        URLEncoder.encode(username,"UTF-8");//编码
        URLDecoder.decode(username,"UTF-8");//解码,在获取cookie的时候
        Cookie cookie = new Cookie("username", username);

 


        Cookie cookie = new Cookie("username", "tom");

        /*
        * Connection: keep-alive
            Content-Length: 0
            Content-Type: text/html;charset=UTF-8
            Date: Tue, 15 Sep 2020 02:14:36 GMT
            Keep-Alive: timeout=20
            *
            *
            * 会在响应头里面设置cookie相应的内容
            Set-Cookie: username=tom
            *
            *
            *
            * 下一次的其他请求会在请求头里面:
            *
            *携带cookie传递过去。。。
            * Cookie: JSESSIONID=1479F7B045B3E185BAFDAB2A67DC2D39; username=tom
            *
            *
            *
            * 达到数据在会话中数据共享。。。。。。
        * */


        //cookie持久化
        /*
 * - Cookie默认的有效时间是一次会话
   - 可以使用`setMaxAge()`去设置Cookie的有效时间
   - 当参数为负数时就是默认存活时间(一次会话)
   - 当参数为0时表示删除该Cookie
   - 当参数为正整数时就代表存活的秒数
   * */
        resp.addCookie(cookie);
    }
}
复制代码

创建cookie时:

 

 

其他的请求:

 

 

 所以达到数据共享。。。。。。。

删除cookie:cookie.setMaxAge(0);

 

            //基于服务器的删除cookie
            cookie.setMaxAge(0);
            //如果添加的cookie的key重复,那么会覆盖之前的
            resp.addCookie(cookie);

 

获取cookie:req.getCookies();

 

 

复制代码
package com.gton.servlet.servlet;

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;

/**
 * @program: javaweb-tomcat
 * @description:
 * @author: GuoTong
 * @create: 2020-09-15 10:01
 **/
@WebServlet(urlPatterns = {"/cookieGet"}, loadOnStartup = 1)
public class CookieServletGet extends HttpServlet {

    /*会话技术Cookie技术:基于浏览器存储共享数据*/
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

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

        resp.setContentType("text/html;charset=utf-8");
        resp.setCharacterEncoding("UTF-8");
        req.setCharacterEncoding("UTF-8");
        Cookie[] cookies = req.getCookies();
        for (Cookie cookie : cookies) {
            System.out.println(cookie.getName() + ":" + cookie.getValue());
        }
    }
}
复制代码

 

posted on   白嫖老郭  阅读(82)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示