JavaWeb03 Cookie和Session

news2025/1/17 3:52:07

一个网站怎么证明你来过?

1.首次访问时服务器给客户端一个cookie,下次客户端再次访问会自动携带cookie,注意cookie可以是多个

2.首次访问时服务器登记了客户端一系列信息,下次客户端再进行访问时服务器自动匹配此客户端是否访问过

cookie

一个网站的cookie是否存在上限?

答:一个web站点可给浏览器方式多个cookie,最多20个,cookie大小有限制是4kb,300个cookie是浏览器的上限

一个cookie是只能保存一个信息吗?

cookie的应用1:记录访问时间

public class CookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决中文乱码
        resp.setHeader("Content-type","text/html;charset=utf-8");
        PrintWriter w = resp.getWriter();
        Cookie[] cookies = req.getCookies();//这里返回数组,可能存在多个cookie
        if (cookies != null) {
            //如果存在cookie
            w.write("上一次访问时间是:");
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie = cookies[i];
                if (cookie.getName().equals("lastlogintime")) {//某个cookie记录的是用户上次访问此网站的时间
                    //获得cookie中的值
                    long lastlogintime = Long.parseLong(cookie.getValue());
                    Date date = new Date(lastlogintime);
                    w.write(date.toLocaleString());
                }
            }
        } else {
            w.write("这是你第一次访问!");
        }
        Cookie cookie=new Cookie("lastlogintime",System.currentTimeMillis()+"");
        cookie.setMaxAge(24*60*60);//cookie有效期:1min后失效
        resp.addCookie(cookie);
    }
}

运行结果:

 cookie的应用2:传递含有中问字符的cookie

 Session(重点)

session就是一个会话,一个用户通过浏览器刷b站,点了很多个超链接最后关闭浏览器这一过程就是一个会话。

session使用场景:保存用户登录信息,购物车信息,网站中用户经常用到的数据

服务器会给每一个浏览器 创建一个session对象,session有保存用户信息的功能,同时我们也可以向session存放信息

session应用1:向session中存东西和从session中获得东西

public class SessionDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决中文乱码
        resp.setHeader("Content-type","text/html;charset=utf-8");
        PrintWriter w=resp.getWriter();

        //获取session
        HttpSession session=req.getSession();
        //向session中存东西,因为用户访问了网页,所以就要登记信息
        session.setAttribute("name",new Person("cl",1));
        //通过session拿到用户id并打印
        String sessionid=session.getId();
        w.write(sessionid);
        //判断session是否为新创建的
        if(session.isNew()){
            w.write("session创建成功!id是:"+sessionid);
        }
        else {resp.getWriter().write("session已经在服务端存在");
    }
}}

session应用2:

我在session应用1代码中创建了一个person对象

这个语句:session.setAttribute("name",new Person("cl",1));

然后我可以在另一个session文件查询到session应用1这个person的信息

public class SessionDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决中文乱码
        resp.setHeader("Content-type","text/html;charset=utf-8");
        HttpSession session=req.getSession();
        Person person=(Person)session.getAttribute("name"); //通过session获取对象的属性值
        System.out.println(person.toString());//在终端打印出
    }
}

session应用3:移除session的某些属性和注销session

public class SessionDemo03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session=req.getSession();
        session.removeAttribute("name");//从session中移除属性
        session.invalidate();//手动注销session
    }
}

在web.xml文件中设置session的有效期

<!--    可设置session失效时间,5min-->
    <session-config>
        <session-timeout>5</session-timeout>
    </session-config>

小结:cookie和session的区别

cookie是用户数据写给浏览器,浏览器保存(多个)

session是把用户数据写到用户独占的session中,各个用户的信息互不干扰,服务器保存(只存储重要信息,防止资源浪费)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/415480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Win10搭建我的世界Minecraft服务器「内网穿透远程联机」

文章目录1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址9. 使用固定公网地址远程联机转载…

Mac远程控制工具有哪些

适用于Mac的远程控制工具有很多&#xff0c;这里我们给大家列举五个常用软件。 1、Apple Remote Desktop 苹果自带远程桌面正如其名称所承诺的那样。作为 Apple 出品的应用程序&#xff0c;您可以想象它的配置和上手是多么容易。从 App Store 下载 Apple Remote Desktop 后&a…

ThreadPoolExecutor获取原始异常

ThreadPoolExecutor作用 ThreadPoolTaskExecutor是Spring框架提供的一个线程池实现&#xff0c;它是基于Java的ThreadPoolExecutor实现的。ThreadPoolTaskExecutor可以管理线程池中的线程&#xff0c;以满足多线程并发执行任务的需要。 FutureTask作用 FutureTask的主要作用…

自动化篇 | 13 | app自动化:airtest

1 airtes简介 1.1 参考地址 http://airtest.netease.com/ # airtest官网 https://airtest.doc.io.netease.com/ # airtest操作方法 https://airtest.doc.io.netease.com/IDEdocs/faq/1_code_examples/ # 代码示例2 airtest架构 Airtest框架 3 airtest使用 3.1 打开界…

【C语言】猜数字游戏的实现

简单不先于复杂&#xff0c;而是在复杂之后。 目录 1.思路&#xff08;代码会附在最后面&#xff09; 2.随机数函数rand 1.思路&#xff08;代码会附在最后面&#xff09; 首先实现一个猜数字游戏我们先要有一个思路&#xff1a;1.产生一个随机数 2.猜数字 3.可能猜大了 4.可能…

java简单一写一个springboot入门案例

首先 我们先打开idea编辑器 然后 选择File New>Project… 项目的话 我们选择 Spring lnitializr 右边的路径要改一下 然后 选择好路径之后 一定要要在后面加上 \项目名 例如 我这里 选择了 D盘下的学习案例下的springbootDom 项目名叫 threshold 那就这样配置 java版本选…

探索【PhySO】

目录0、 初步报错情况1、230、 初步报错情况 根据原链接&#xff0c;已确定安装成功&#xff0c;运行demo时出现报错&#xff0c;不能正常运行 报错&#xff1a; .Dummy epoch time 238.366736 ms .Dummy epoch time (w duplicate elimination) 180.852427 ms (found 15/1…

【结构型模式】代理模式

文章目录优秀借鉴1、简介2、结构3、实现方式3.1、案例引入3.2、静态代理3.3、JDK动态代理3.4、CGLIB动态代理4、区别对比4.1、静态代理和动态代理4.2、JDK动态代理和CGLIB动态代理5、代理模式优缺点6、应用场景优秀借鉴 设计模式&#xff08;四&#xff09;——搞懂什么是代理…

线段树的懒标记

上次看的那个视频讲线段树的时候压根没讲懒标记&#xff0c;然后我今天去写题目直接被薄纱&#xff01;都是70分&#xff0c;剩下3个节点tml&#xff01;&#xff01;&#xff01; 懒标记 我们在修改一些区间的时候&#xff0c;按照我昨天来学的来修改要改到最下面的叶节点去…

Visual Studio如何将UTF-8字符串输出到控制台

解决c语言使用libcurl库时控制台输出中文出现乱码的问题。 字符编码问题一直以来都是Windows系统的诟病&#xff0c;而Visual Studio也是饱受此诟病。由于历史原因&#xff0c;Windows系统对各个不同的国家地区可能采用不同的code page。由于早先Unicode并未发展成熟&#xff0…

Java设计模式之工厂模式

什么是工厂模式 工厂模式就是将创建对象的具体过程和使用过程分开&#xff0c;这样能够使代码更加灵活。 工厂模式主要分为三类&#xff1a; 简单工厂模式工厂方法模式抽象工厂模式 比如在没有工厂的时候&#xff0c;用户需要一台奥迪车&#xff0c;那么就需要用户去创建一台…

【java 多线程】并发设计模式-两阶段终止模式(对interrupt的理解)

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

惊艳!阿里出品“Java全栈进阶宝典”,广度与深度齐头并进

前言 据有关数据统计&#xff0c;目前来看&#xff0c;大大小小的招聘网站上面&#xff0c;Java岗的招聘量仍然是最多的&#xff0c;基本是其他语言的3倍以上&#xff0c;由于目前Java所处的统治级地位&#xff0c;单就数量来看&#xff0c;Java语言实现的系统是海量的&#x…

linux安装MongoDB

环境说明 系统CentOS&#xff1a;CentOS7 mongodb版本 4.2.24 下载 官网下载地址 Download MongoDB Community Server | MongoDB 某云盘 链接&#xff1a;https://pan.baidu.com/s/1G4AC3h5rvz9WM3fx4gJzbA 提取码&#xff1a;ojkl 上传解压 在根目录下创建opt文件夹…

【数据分析之道-基础知识(九)】推导式

文章目录专栏导读1、前言2、列表推导式3、集合推导式4、字典推导式5、元组推导式专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN Python领域新星创作者&#xff0c;专注于分享python领域知识。 ✍ 本文录入于《数据分析之道》&#xff0c;本专栏针对大学生、初级数据分…

C语言学习1--------Visual Studio集成开发环境的搭建

C语言学习1--------Visual Studio集成开发环境的搭建适合初学者适用集成开发环境下载 Visual Studio 2019安装 Visual Studio 2019安装工作负载为C自定义安装位置激活 Visual Studio适合初学者适用集成开发环境 建议初学者适用最新的——Visual Studio 2019为集成开发环境。 部…

【数据库原理 • 五】数据库安全性与完整性

前言 数据库技术是计算机科学技术中发展最快&#xff0c;应用最广的技术之一&#xff0c;它是专门研究如何科学的组织和存储数据&#xff0c;如何高效地获取和处理数据的技术。它已成为各行各业存储数据、管理信息、共享资源和决策支持的最先进&#xff0c;最常用的技术。 当前…

【C++11那些事儿(一)】

文章目录一、C11简介二、列表初始化2.1 C98中{}的初始化问题2.2 C11中的列表初始化三、各种小语法3.1 auto3.2 decltype3.3 nullptr3.4 范围for四、STL中的一些变化五、左/右值引用和移动语义&#xff08;本篇重点&#xff09;5.1 做值引用和右值引用5.2 左值引用与右值引用比较…

【快乐手撕LeetCode题解系列】—— 复制带随机指针的链表

【快乐手撕LeetCode题解系列】—— 复制带随机指针的链表&#x1f60e;前言&#x1f64c;复制带随机指针的链表&#x1f64c;画图分析&#xff1a;&#x1f60d;思路分析&#xff1a;&#x1f60d;源代码分享&#xff1a;&#x1f60d;总结撒花&#x1f49e;&#x1f60e;博客昵…

shell结构化命令中for命令

shell脚本编程系列 for var in list docommands done读取列表中的值 每次遍历值列表时&#xff0c;for命令会将列表中的下一个值赋值给变量 #!/bin/bash# basic for commandfor test in Alabama Alaska Arizona Arkansas California Coloradodoecho The next state is $testdo…