1 状态管理

a) 什么是状态管理?
将浏览器与web服务器之间多次交互当做一个整体处理,并且将多次交互涉及的数据(即状态)保存下来.

b) 如何进行状态管理?

  1. 可以将状态保存在客户端
    将状态保存到浏览器这边,通常使用Cookie技术
  2. 将状态保存到服务器端(session 会话)

c) Cookie

  1. 什么是coolie?
    服务器为了识别用户身份临时存在浏览器端的少量数据.
  2. 工作原理
    浏览器访问服务器时,服务器将一些数据已set-cookie消息头的形式发送给浏览器.浏览器会将这些数据临时保存下来;当浏览器再次访问服务器时,会将这些数据以cookie消息头的形式发送给服务器
  3. 添加cookie
    cookie c = new cookie(string name,string value);
    注:name:cookie名称 value:cookie值
    response.addCookie(c);

d) 读取Cookie
Cookie[] request.getCookies();
注:有可能返回null;
String cookie.getName();
String cookie.getValue();

e) 编码问题

  1. Cookie只能存放合法的ascii字符.
  2. 如果要存放中文,可以将中文转换成合法的ascii字符形式.
    String URLEncoder.encode(String str,String charset)
    String URLdecode,decode(String str,String charset)

    注:建议添加cookie时,都统一编码(使用以上对保存的数据进行处理)

f) 生存时间问题
cookie.setMaxAge(int seconds);//设置生存时间

  1. 单位是秒
  2. Sencods>0 浏览器通常会将cookie保存在硬盘上,超过指定的时间,cookie失效.
    sencods<0 默认值(浏览器会将cookie保存在内存中)
    sencods=0 删除cookie.将cookie的时间设置为0就删除了.

g) Cookie的路径问题

  1. 什么是cookie的路径问题?
    浏览器访问服务器上某地址,会比较请求地址是否符合cookie的路径要求,只有符合的cookie才会被发送。
  2. Cookie的默认路径?
    等于添加cookie的web组件的路径:比如:/servlet-day06/biz01/addCookie.jsp添加了一个cookie则cookie的默认路径是/servlet-day06/biz0.
  3. 匹配规则:
    要访问的地址必须是cookie的路径或者其子路径.
  4. 设置cookie路径
    cookie.setPath(String path);

h) Cookie的限制

  1. Cookie不安全.(敏感数据要加密处理)
  2. Cookie可以被用户禁止.
  3. Cookie只能保存少量数据(大约4k).
  4. 浏览器端保存的cookie的数量也有限制.(几百个)
  5. Cookie只能保存字符串.

2 Session(会话)

a) 什么是session?
服务器端为了保存状态而创建的一个特殊的对象.

b) 工作原理
浏览器访问服务器时,服务器创建一个特殊的对象session(该对象有唯一一个id,称之为sessionid)服务器会将sessionid以cookie的形式发送给浏览器;当浏览器在访问时,会将sessionid发送过来,服务器端可以利用这个session找到对应的session对象.

c) 如何获得session对象?

  1. 方式一
    httpSession session = request.getSession(boolean flag);
    当flag为true时,先查看请求当中有没有sessionid,如果没有则创建一个session对象,如果有,依据sessionid查找对应的session对象.如果找到则返回,找不到会创建一个新的session对象.
    当flag为false时,先查看请求当中有没有sessionid,如果没有则返回null,如果有,依据sessionid查找对应的session对象.如果找到则返回,找不到返回null.
  2. 方式二
    httpSession session = request.getSession();
    等价于request.getSession(true);

d) 几个方法

  1. String session.getId();
  2. setAttrbute(String name,object obj);
  3. Object getAttrbute(string name);
  4. removeAttrbute(string name);//解除绑定

e) session超时

  1. 什么是session超时?
    服务器会将空闲时间过长的session对象删除掉.
    注:为了节省内存空间的占用.服务器默认的超时限制一般是30分钟.
  2. 怎么修改?
    配置文件(web.xml)中修改session config的时间数值.
  3. SetMaxInactiveInterval(int second);//两次请求之前的最大间隔时间.如果超过了时间限制则服务器会销毁session对象.

f) 删除session
  invalidate();

java-Servlet-cookie and session的更多相关文章

  1. Servlet Cookie、Session

    HTTP不能保持连接,可使用会话保存用户信息. 常用的会话技术有2种:Cookie.Session. Cookie 1.原理 当用户第一次访问某个网站时,服务器设置Cookie,存储用户信息,放在响应 ...

  2. Java之Cookie与Session

    Cookie.Session Cookie:服务端生成Cookie发给客户端用于认证 Session:服务端进行进行登记,每人有不同的Session session与cookie的区别 Cookie: ...

  3. 【设计模式】装饰器模式与Java Servlet、Spring Session在其中的使用

    简述 装饰器模式,可以通过装饰器类,通过依赖原实现的方式(不使用继承),达到扩展原实现的目的.UML图如下: ServletRequestWrapper于其中的使用 ServletRequestWra ...

  4. Java学习--Cookie 和session

  5. [Java] Servlet工作原理之二:Session与Cookie

    (未完成) 一.Cookie与Session的使用简介 1 Cookie Cookie 用于记录用户在一段时间内的行为,它有两个版本:Version 0 和 Version 1,分别对应两种响应头 S ...

  6. Java开发工程师(Web方向) - 02.Servlet技术 - 第2章.Cookie与Session

    第2章--Cookie与Session Cookie与Session 浏览器输入地址--HTTP请求--Servlet--HTTP响应--浏览器接收 会话(session):打开浏览器,打开一系列页面 ...

  7. java的会话管理:Cookie和Session

    java的会话管理:Cookie和Session 1.什么是会话 此处的是指客户端(浏览器)和服务端之间的数据传输.例如用户登录,购物车等 会话管理就是管理浏览器客户端和服务端之间会话过程产生的会话数 ...

  8. Java cookie和session介绍与区别

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于才服务器端保持状态的 ...

  9. Java——Cookie与Session

    Cookie通过客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 1.Cookie  1.1概念及使用方法 Cookie实际上是一小段文本信息.客户端请求服务器,如果服务 ...

  10. Java Cookie和Session(转载)

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于才服务器端保持状态的 ...

随机推荐

  1. 「ARC 139F」Many Xor Optimization Problems【线性做法,踩标】

    「ARC 139F」Many Xor Optimization Problems 对于一个长为 \(n\) 的序列 \(a\),我们记 \(f(a)\) 表示从 \(a\) 中选取若干数,可以得到的最 ...

  2. Vben Admin 源码学习:项目初始化

    0x00 前言 Vue-Vben-Admin 是一个免费开源的中后台模版.使用了最新的vue3,vite2,TypeScript等主流技术开发,开箱即用的中后台前端解决方案考. 本系列本着学习参考的目 ...

  3. 利用shell脚本自动化备份数据库与手动备份还原数据库操作

    1.在linux操作系统上手动备份数据库 mysqldump -h 服务器IP地址 -u root -p数据库密码 --databases 所要备份的数据库名称 > /路径/数据库.sql(自定 ...

  4. CentOS8安装mysql8.0具体步骤

    操作系统:CentOS Linux release 8.0及以上 Mysql版本:Mysql 8.0.22 x86_64 (MySQL Community Server - GPL) Mysql8下载 ...

  5. 测试平台系列(97) 完善执行case部分

    大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程,希望大家多多支持. 欢迎关注我的公众号米洛的测开日记,获取最新文章教程! 回顾 上一节我们讨论了怎么结束一个 ...

  6. 使用 .NET MAUI 创建移动应用——Get Start

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 1.IDE下载安装 如果你还没安装Visual Studio 2022 预览版 你 ...

  7. 实现领域驱动设计 - 使用ABP框架 - 创建实体

    用例演示 - 创建实体 本节将演示一些示例用例并讨论可选场景. 创建实体 从实体/聚合根类创建对象是实体生命周期的第一步.聚合/聚合根规则和最佳实践部分建议为Entity类创建一个主构造函数,以保证创 ...

  8. NFS网络文件系统搭建

    1. 简介 NFS, 就是network file system的简称. 可以通过NFS, 来共享不同主机的文件.目录. 2010年,NFS已经发展到v4.1版本. 2. 应用场景 在中小型企业中,N ...

  9. 使用Karmada实现Helm应用的跨集群部署

    摘要:借助Karmada原生API的支持能力,Karmada可以借助Flux轻松实现Helm应用的跨集群部署. 本文分享自华为云社区< 使用Karmada实现Helm应用的跨集群部署[云原生开源 ...

  10. Java数组的基本操作

    public class Array1 { public static void main(String[] args) { int [] num={1,2,3,4,5}; System.out.pr ...