cookie和session

本文详细介绍了回话技术中的cookie和session的工作原理及实际应用。包括如何利用cookie记录客户端状态、设置持久化时间以及如何实现session的创建、数据存储和生命周期管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回话技术:帮助服务器记住客户端状态(区分客户端)

cookie:数据存储在客户端本地,减少服务器端的存储压力,安全性不好,客户端可以清楚cookie

session:数据存储在服务器端,安全性好,增加服务器压力

cookie(不能存储中文)

1、服务器端向客户端发送一个cookie

//1.创建cookie对象
        Cookie cookie = new Cookie("goods", "peanut");
        //设置cookie的持久化时间
        //cookie.setMaxAge(2*60);
        //设置cookie路径
        //cookie.setPath("/WEB05/demo/SendCookieServlet");
        cookie.setPath("/WEB05");
        //2.cookie
        response.addCookie(cookie);

删除cookie:设置一个同名同路径持久化时间为0的新cookie覆盖

//删除客户端保存的cookie
        Cookie cookie = new Cookie("goods", "peanut");
        cookie.setPath("/WEB05");
        cookie.setMaxAge(0);
        response.addCookie(cookie);

2、服务器端接收客户端携带的cookie

//获取客户端的cookie数据
        Cookie[] cookie = request.getCookies();
        //通过cookiename获取cookie值
        if(cookie!=null){
            for(Cookie c:cookie){
                String cookieName = c.getName();
                if(cookieName.equals("goods")){
                    System.out.println(c.getValue());
                }
            }
        }

cookie的实际使用

记录上一次登录时间

Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String lasttime = sdf.format(date);
        Cookie cookie = new Cookie("lasttime", lasttime);
        cookie.setMaxAge(10*60);
        response.addCookie(cookie);
        String lastaccesstime = null;
        Cookie[] cookies = request.getCookies();
        if(cookies!=null){
            for(Cookie c:cookies){
                String cookieName = c.getName();
                if(cookieName.equals("lasttime")){
                    lastaccesstime=c.getValue();
                    response.setContentType("text/html;charset=utf-8");
                    response.getWriter().write(lastaccesstime);
                }
            }
        }if(lastaccesstime==null){
                response.setContentType("text/html;charset=utf-8");
                response.getWriter().write("第一次访问");
        }

session(也是一个域对象)

为每个客户端都创建一块内存空间 存储客户的数据,客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间

需要借助于Cookie存储客户的唯一性标识JSESSIONID

1、获取客户端的域对象

HttpSession session = request.getSession();

2、向session域中存数据

session.setAttribute("name", "王者荣耀");

持久化存储session

//获取JSESSIONID
        String id = session.getId();
        //手动创建一个cookie存储JSESSIONID
        Cookie cookie = new Cookie("JSESSIONID", id);
        cookie.setPath("/WEB05");
        cookie.setMaxAge(2*60);
        response.addCookie(cookie);
        response.getWriter().write(id);

获得session域中的内容

//获取session对象
        HttpSession session = request.getSession();
        String name =(String)session.getAttribute("name");
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().write(name);

原理:关闭会话,session消失,指的是jsessionid消失,session还存在在服务器中,把jsessionid存储到cookie中,通过设置cookie的持久化时间,实现session的持久化使用

session的生命周期

1、创建:第一次执行request.getsession()时创建

2、销毁:服务器关闭、session过期/失效(默认30分钟-从不操作服务器端的资源开始)、手动销毁   invalidate()方法

session域的作用范围

默认一次会话中(一次会话中任何资源公用一个session对象)

session是把jsessionid存到cookie中,通过cookie中的id去找客户端的自己的session

转载于:https://www.cnblogs.com/yelena-niu/p/9283565.html

### Cookie Session 的区别及用法 #### 定义与存储位置 Cookie 是一种小型文本文件,保存在客户端浏览器中。每次请求页面时都会发送给服务器[^1]。Session 数据则保存在服务器端,在用户的会话期间保持有效。 #### 生命周期管理 Cookies 可以设置过期时间,可以是临时性的(关闭浏览器即失效),也可以是持久化的(设定具体有效期)。Sessions 通常会在一段时间不活动后自动销毁,或者通过编程方式显式结束。 #### 安全性隐私考虑 由于 Cookies 存储于用户设备上,因此存在被篡改的风险;而 Sessions 更加安全因为数据存放在服务端。然而,如果使用不当,比如传输未加密的敏感信息,则两者都可能带来安全隐患。 #### 使用场景差异 当需要记住少量非敏感的信息如偏好设置时可以选择 Cookies 。对于涉及身份验证个人资料保护的应用程序逻辑部分更适合采用 Sessions 来处理登录状态等重要事务。 #### 实现示例 ##### 设置读取 Cookie (JavaScript) ```javascript // 创建 cookie document.cookie = "username=JohnDoe; expires=Thu, 18 Dec 2023 12:00:00 UTC"; // 获取特定名称的 cookie 值 function getCookie(name) { const value = `; ${document.cookie}`; const parts = value.split(`; ${name}=`); if (parts.length === 2) return parts.pop().split(';').shift(); } console.log(getCookie('username')); // 输出 JohnDoe ``` ##### 启动并操作 Session (PHP) ```php <?php session_start(); $_SESSION["user"] = "admin"; echo $_SESSION["user"]; // 显示 admin unset($_SESSION['user']); // 删除单个变量 session_destroy(); // 销毁整个 session ?> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值