重新学javaweb---cookie&&session

2023-11-08

会话技术
1.浏览器开始访问网站到访问网站结束期间产生的多次请求响应组合在一起叫做一次会话
会话的过程中会产生会话相关的数据,我们需要将这些数据保存起来。

Cookie:客户端技术
Session:服务器端技术

2.Cookie

Cookie是基于set-Cookie响应头和Cookie请求头工作的,服务器可以发送set-Cookie请求头命令浏览器保存一个cookie信息,浏览器会在访问服务器时以Cookie请求头的方式带回之前保存的信息

    request.getCookies();

    response.addCookie(Cookie c);

    new  Cookie(String name,String value)//Cookie在构造的时候就需要设定好cookie的名字和值
    getName();
    getValue();
    setValue();
    !!setMaxAge与getMaxAge方法  

一个Cookie如果没有设置过MaxAge则这个Cookie是一个会话级别的Cookie,这个Cookie信息打给浏览器后浏览器会将它保存在浏览器的内存中,这意味着只要浏览器已关闭随着浏览器内存的销毁Cookie信息也就消失了.一个Cookie也可以设置MaxAge,浏览一一旦发现收到的Cookie被设置了MaxAge,则会将这个Cookie信息以文件的形式保存在浏览器的临时文件夹中,保存到指定的时间到来位置.这样一来即使多次开关浏览器,由于这些浏览器都能在临时文件夹中看到cookie文件,所以在cookie失效之前cookie信息都存在.
想要命令浏览器删除一个Cookie,发送一个同名同path的cookie,maxage设置为0,浏览器以名字+path识别cookie,发现同名同path,cookie覆盖后立即超时被删除,从而就删除了cookie.

setPath与getPath方法
– 用来通知浏览器在访问服务器中的哪个路径及其子路径时带着当前cookie信息过来
如果不明确设置,则默认的路径是发送Cookie的Servlet所在的路径
http://localhost/Day05/servlet/
setDomain与getDomain方法
– 用来通知浏览器在访问哪个域名的时候带着当前的cookie信息.但是要注意,现代的浏览器一旦发现cookie设置过domain信息则会拒绝接受这个Cookie.我们平常不要设置这个方法

!案例:曾经看过的书

3.Session
Session 是一个域
!!作用范围:当前会话范围
!!生命周期:
当程序第一次调用到request.getSession()方法时说明客户端明确的需要用到session此时创建出对应客户端的Session对象.
当session超过30分钟(这个时间是可以在web.xml文件中进行修改的)没有人使用则认为session超时销毁这个session.
程序中明确的调用session.invalidate()方法可以立即杀死session.
当服务器被非正常关闭时,随着虚拟机的死亡而死亡.
*如果服务器是正常关闭,还未超时的session会被以文件的形式保存在服务器的work目录下,这个过程叫做session的钝化.下次再正常启动服务器时,钝化着的session会被恢复到内存中,这个过程叫做session的活化.
 作用:在会话范围内共享数据
 session 的原理:
  request.getSession()方法会检查请求中有没有JSESSIONID cookie,如果有拿出他的值找到对应的session为他服务.
  如果没有则检查请求的URL后有没有以参数的形式带着JSESSIONID过来,如果有则找到对应的Session为浏览器服务器
  如果还找不到则认为这个浏览器没有对应的Session,创建一个Session然后再在响应中添加JSESSIONID cookie,值就是这个Session 的id
   默认情况下,JSESSIONID 的path为当前web应用的名称,并且没有设置过MaxAge,是一个会话级别的cookie. 这意味着一旦关闭浏览器再新开浏览器时,由于JSESSIONID丢失,会找不到之前的Session
  我们可以手动的发送JSESSIONID cookie,名字和path设置的和自动发送时一样,但是设置一下MaxAge,使浏览器除了在内存中保存JSESSIONID信息以外还在临时文件夹中以文件的形式保存,这样即使重开浏览器仍然可以使用之前的session
  

        String prod = request.getParameter("prod");
        prod = new String(prod.getBytes("iso8859-1"),"utf-8");

        HttpSession session = request.getSession();
        Cookie jc = new Cookie("JSESSIONID",session.getId());
        jc.setPath(request.getContextPath());
        jc.setMaxAge(1800);
        response.addCookie(jc);

        session.setAttribute("prod", prod);

  
URL重写:(别和URL编码弄混了)
  如果浏览器禁用了Cookie,浏览器就没有办法JSESSIONID cookie,这样就用不了Session了.
  我们可以使用URL重写的机制,在所有的超链接后都以参数的形式拼接JSESSIONID信息,从而在点击超链接时可以使用URL参数的方式待会JSESSIONID,从而使用Session
  将URL进行重写拼接上JSESSIONID的过程就叫做URL重写

    request.getSession() --在URL重写之前一定要先创建出Session,才有Session id,才能进行重写
    response.encodeURL()--- 一般的地址都用这个方法重写
    response.encodeRedirectURL() --- 如果地址是用来进行重定向的则使用这个方法
    request.getSession();//--在URL重写之前一定要先创建出Session,才有Session id,才能进行重写

    String url1 = request.getContextPath()+"/servlet/BuyServlet?prod=电视机";
    url1 = response.encodeURL(url1);
    String url2 = request.getContextPath()+"/servlet/BuyServlet?prod=冰箱";
    url2 = response.encodeURL(url2);
    String url3 = request.getContextPath()+"/servlet/PayServlet";
    url3 = response.encodeURL(url3);

url重写的方法一旦发现浏览器带回了任意cookie信息,则认为客户端没有禁用cookie,就不会再进行重写操作**

cookie是客户端技术
 数据保存在客户端,这个信息可以保存很长时间
 数据随时有可能被清空,所以cookie保存的数据是不太靠谱的
 数据被保存在了客户端,随时有可能被人看走,如果将一些敏感信息比如用户名密码等信息存在cookie中,可能有安全问题

session是服务器端技术
 数据保存在服务区端,相对来说比较稳定和安全
 占用服务器内存,所以一般存活的时间不会太长,超过超时时间就会被销毁.我们要根据服务器的压力和session 的使用情况合理设置session的超时时间,既能保证session的存活时间够用,同时不用的session可以及时销毁减少对服务器内存的占用.

Session案例:
!!用户登录注销
防止表单重复提交
实现一次性验证码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重新学javaweb---cookie&&session 的相关文章

  • Symfony2:检查会话是否存在

    有没有办法检查会话是否存在 我尝试过这种方法 但它总是给我一个 太棒了 回答 session this gt getRequest gt hasPreviousSession if session return new Response B
  • 使用 3.0 SDK 在 FB 墙上发布

    各位程序员大家好 我在使用新的 Facebook SDK 时遇到了困难 场景是 我使用片段 所以我按照以下步骤操作 为什么 Android Facebook 界面不支持 Fragments https stackoverflow com q
  • 强制用户注销会话 PHP

    我似乎无法找到这个问题的直接答案 有没有办法强制登录用户注销 我的登录系统本质上只依赖于包含用户唯一 ID 存储在 mysql 数据库中 的会话 所以本质上只是 if isset SESSION user id echo You re lo
  • 如何增加 MVC 3 中的会话超时

    我有一个 ASP NET MVC 3 Razor 应用程序 并且经常遇到会话超时 有没有办法增加Session的价值 您没有提供足够的详细信息 例如您的配置 问题描述等 更确切地说发生了什么 这篇文章可能会有所帮助 ASP NET MVC3
  • Rails 5 和 Devise:如何在不更改默认策略的情况下禁用基于令牌的策略上的会话

    我有一个 Rails 5 应用程序 使用两种身份验证策略 一种使用基于令牌的身份验证 另一种使用基于默认会话的身份验证 当我触发令牌身份验证时 我试图禁用会话保存 因为当我使用 JWT 对用户进行身份验证时 它会保存会话 并且该会话应该是无
  • 如何为多处理池中的单个进程分配Python请求会话?

    考虑以下代码示例 import multiprocessing import requests session requests Session data to be processed def process arg do stuff w
  • NodeJS 快速会话 req.session 未定义

    我正在开发一个简单的登录系统 但会话似乎没有保存 我编写了一个简单的代码进行测试 谁能告诉我它有什么问题吗 我正在运行登录 之后我正在运行 is logged 但我从未登录并且两个会话都未定义 var port process env PO
  • 无法加载请求的类:会话

    我的配置文件看起来像这样 gt config sess cookie name ci session config sess expiration 7200 config sess expire on close TRUE config s
  • 为什么呼叫会话不起作用? (代码点火器 3)

    我的配置是这样的 config sess driver database select database driver config sess save path ci sessions name of the mysql table co
  • 会话对象不更新 ASP.NET

    我在代码的一个时刻设置了一个会话对象 Session my name Dave 稍后在我的代码中 我给用户一个更新此对象的机会 Session my name TextBox1 Text 我重新加载页面并显示一个简短的 hello 语句 如
  • 将 cookie 设置为在会话结束时过期? ASP.NET

    我很惊讶我找不到任何答案 如何将 cookie 中的 sessionid 设置为在会话结束时过期 当浏览器关闭或用户一段时间不活动时 我发现的两个解决方案是 httpcookie Expires HttpContext Current Se
  • 如何在 Express 4.0 中发送 Flash 消息?

    因此 我的 Web 应用程序需要身份验证 并且我有一个注册页面 如果用户尝试使用数据库中已有的电子邮件进行注册 我想向他们显示一条错误消息 我正在尝试在 html 端使用此代码来执行此操作 div class alert alert dan
  • 对过期会话进行休息调用:HTTP 401 响应导致浏览器显示登录窗口

    我编写了一个 HTML 5 应用程序 它使用 AngularJS 并与在 Tomcat 上运行的 Java REST 后端进行交互 我使用 Spring Security 来处理登录和安全性 当用户进入网站时 他将被转发到登录页面 该页面创
  • 如何在应用程序中创建会话对象

    在我的应用程序中 我想创建一个用于登录和注销的会话 我不知道如何使用会话 任何人都可以通过提供一些示例来帮助我 我认为会话对象应该是在应用程序开始运行时声明和初始化的静态对象 我遇到了这个问题 并决定将我的会话对象放入 utils 类中 该
  • 如何使用express在node.js中使浏览器关闭后会话过期?

    我在用 req session cookie maxAge 14 24 3600 1000 0 让会话在两周后过期 但现在我想让它在浏览器关闭后过期 有什么办法可以做到吗 来自连接会话中间件文档 https github com expre
  • ASP.NET Core 会话超时

    我记得我们在 ASP NET 中使用了 session timeout 来更改会话超时 如果不更改 则为 20 分钟 我尝试在 Startup cs 中更改 ASP NET Core 3 1 中的会话超时 但没有任何反应 我对操作员使用身份
  • 如何将会话管理添加到简单的 Perl CGI 网页?

    我有一个简单的网页 到目前为止不需要任何登录 它是用 Perl CGI 编程的 我想知道添加会话支持以便获得登录信息的步骤 我不需要非常复杂的方法 因为网页非常简单 另外 我想要一些关于支持 Perl 会话所需的技术 库的建议 我在很多很多
  • 上游太大 - nginx + codeigniter

    我从 Nginx 收到此错误 但似乎无法弄清楚 我正在使用 codeigniter 并使用数据库进行会话 所以我想知道标题怎么会太大 有没有办法检查标题是什么 或者看看我能做些什么来修复这个错误 如果您需要我提供任何conf文件或其他文件
  • 将数据库中的用户 ID 添加到 Codeigniter 中的会话数据中?

    我是 CodeIgniter 的新手 在从数据库添加用户 ID 用户登录后 到会话数据时遇到问题 这是我的代码问题 之前可能会在 SOF 上被问到 在付出了所有努力之后 我问这个 登录模型
  • NestJS e2e 测试模拟会话装饰器

    我正在尝试使用 supertest 编写一个 e2e 测试 其中我的控制器实际上使用了 Session 装饰师 然而 我不想承担使用数据库连接等启动会话的全部负担 因此测试中的我的应用程序实际上并未初始化会话 相反 我想首先模拟掉装饰器提供

随机推荐

  • C# .NETCORE3.1 系列教程(一) 开发环境搭建与创建的一个Web项目

    TOC JXMaker NET CORE3 1系列教程 一 开发环境与创建Web项目 JXMaker NET CORE3 1系列教程 一 开发环境搭建与创建的一个Web项目 开发环境 教程中使用的开发环境为Win2010 VS 2019 安
  • BUCK型开关电源中的损耗与效率的计算

    在BUCK型开关电源中 如果没有损耗 那效率就是100 但这是不可能的 BUCK型开关电源中主要的损耗是导通损耗和交流开关损耗 导通损耗主要是指MOS管导通后的损耗和肖特基二极管导通的损耗 是指完全导通后的损耗 因为导通不是瞬间导通 有个从
  • 显示序号_合并单元格如何快速更新序号,最简单的3个函数解决你的问题

    在使用Excel表格的时候 我们经常会对数据填充一个序号 但是经常会碰到一个困难点的地方就是 当出现合并单元格的时候 自动填充序号就无法使用 今天我们就来学习3个最简单的 合并单元格中如何自动更新序号 一 案例说明 案例说明 如上图所示 我
  • Java中Path.of()使用报错

    Java中Path of方法的使用 起因 学习Java核心技术这本书的3 7 3章节时 对于书中代码的实现出现了一些问题 书中所呈现的是这样的语句 点击查看代码 Scanner in new Scanner Path of myfile S
  • Vue配置代理(解决跨域请求)

    app vue
  • 《区块链原理与技术》学习笔记(一)——区块链概念和区块链共识机制

    区块链原理与技术 专业课学习笔记 第一部分 一 概论 1 什么是区块链 2 区块链与比特币的关系 2 1 区块链是比特币的底层技术 是比特币的核心基础与架构 2 2 区块链不止是比特币 3 区块链的特点 3 1去中心化 3 2 透明性 3
  • 使用Python绘制6.1儿童节消消乐,素描图,词云图,字符画图,提取轮廓图及蒙太奇效果图

    这篇博客将介绍如何使用Python绘制6 1儿童节消消乐 素描图 词云图 字符画图 提取轮廓图及蒙太奇效果图 使用Python绘制端午dragboat消消乐 美轮美奂的界面效果 1 效果图 6 1儿童节快乐原始图VS素描图 素描进阶 正常
  • 苹果手机充电口接触不良怎么办_充电器接触不良怎么办 高手来教你几招-装修攻略...

    手机在充电过程中 会遇到有些充电器接触不良的情况 有些人会误以为是手机的原因 当我们手机充不上电时候 其实可以换一个充电器对手机进行充电 充电器接触不良可能是金属接触片太脏了 而导致的接触不良 可以拿干净的布和纸擦试一下 也可以拿少许棉花
  • STC32G 三电感电磁循迹小车

    文章目录 前言 效果 准备工作 增量式以及位置式PID 电机闭环 电磁采样 舵机闭环 合并 前言 准备18届的负压电磁 趁现在考试延期赶紧把车子给调了 现在速度就只能提到1 5m 再往上调就有点打滑了 只能等后面逐飞把负压电机的做出来了之后
  • 如何用管理员权限打开CMD(快捷键)

    近期给电脑重新装了win10系统 在使用cmd时发现执行一些命令提示我权限不够 需要管理员权限 有两种常用方法可以使用管理员权限打开cmd命令行 第一种 搜索cmd应用 然后点击以管理员身份运行 第二种 快捷键打开 先win r 输入cmd
  • 不限流量 全网CDN图床 图床API_个人自用图床折腾:为uPic和PicGo图床客户端对接第三方图床...

    前言 在写个人博客文章时 一般需要搭配图床存储图片 自己之前用的是 iPic的微博匿名图床 typora 进行markdown格式的写作 最近捣鼓了一下和iPic比较相似的图床客户端uPic和PicGo 最开始一直弄不明白怎么自定义第三方图
  • 项目:水温控制系统

    使用到了 KEY OLED LED BEEP 该项目已经压缩在了E盘 stm32正点原子资料文件夹 硬件平台 大二在精密实验室焊的32主板 小知识 在以用前还要再次extern float 没有unsigned float
  • 前端vue+axios实现关闭/刷新页面前向后台接口发送请求

    实现监听浏览器三种离开页面的方式 代码 created window addEventListener beforeunload e gt this updateHandler e destroyed window removeEventL
  • 教你使用Python Statsmodel进行假设检验和线性回归

    如果你使用 Python 处理数据 你可能听说过 statsmodel 库 Statsmodels 是一个 Python 模块 它提供各种统计模型和函数来探索 分析和可视化数据 该库广泛用于学术研究 金融和数据科学 在本文中 我们将介绍 s
  • C语言求矩阵行最简型及其秩

    注意 re row element ce column element include
  • Java 堆内存是线程共享的吗?

    本文部分援引于作者Hollis大神 原文链接 问题引出 1 堆是线程共享的内存区域 栈是线程独享的区域 2 堆主要存放对象实例 栈中主要存放各种基本数据类型 对象的引用 以上两个结论其实不完全正确 在解答之前 先想想Java 对象的内存分配
  • element ui 更换主题色

    一 安装scss包 npm install save dev sass loader npm install save dev node sass 在这说一下 node node sass sass loader存在版本兼容问题需要选择合适
  • 爬虫搭建IP代理

    大家好 作为一名爬虫从业者 我们都知道使用IP代理可以帮助我们避免被屏蔽 获取不同地理位置的数据等等 但是在选择IP代理时 我们可能会遇到一些困难 例如代理服务器速度慢 不稳定 不安全等问题 今天我想和大家分享几款好用的IP代理商 Smar
  • 开关电源学习笔记10 --- Zeta变换器

    Zeta变换器 原理电路如下 输入 输出极性相同 可升降压 开关管驱动困难 实际中比较少使用 假设已经达到了平衡状态 工作情况如下 由于处于平衡状态 所以任何储能元件 在开关断开和闭合的两个过程 必然是一个充能 一个放能 SW闭合后 输入电
  • 重新学javaweb---cookie&&session

    会话技术 1 浏览器开始访问网站到访问网站结束期间产生的多次请求响应组合在一起叫做一次会话 会话的过程中会产生会话相关的数据 我们需要将这些数据保存起来 Cookie 客户端技术 Session 服务器端技术 2 Cookie Cookie