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. 20212115朱时鸿实验一《python程序设计》实验报告

    ------------恢复内容开始------------ #学号20212115 <python程序设计>实验一报告 课程: <python程序设计> 班级:2121 姓名 ...

  2. 树形dp基础

    今天来给大家讲一下数形dp基础 树形dp常与树上问题(lca.直径.重心)结合起来 而这里只讲最最基础的树上dp 1.选课 题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程 ...

  3. jeecgboot-vue3笔记(八)——treeSelect树形选择组件的使用(一次性加载)

    使用效果 前端代码 定义interface export interface TreeDataItem { value: string; key: string; title?: string; sl ...

  4. 深度学习与CV教程(8) | 常见深度学习框架介绍

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...

  5. Training loop Run Builder

    以下内容来自deeplizard pyorch_P31  

  6. CentOS切换用户命令su or su+username

    1.打开终端,提示符为"$",表明该用户为普通用户,此时,直接输su,回车,输入root密码,回车,就可以切换到root用户下,此时的提示符变为"#". 注意, ...

  7. SQL Server各版本序列号/激活码/License/秘钥

    SQL Server 2019 Enterprise:HMWJ3-KY3J2-NMVD7-KG4JR-X2G8G Enterprise Core:2C9JR-K3RNG-QD4M4-JQ2HR-846 ...

  8. jdk8对象集合转map集合

    package koukay.Controller.Controllers; import koukay.Portal.webservices.Entity.User; import com.fast ...

  9. sql-自动增长的列

    mysql自动增长 如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长 方式1:创建表时,添加主键约束,并且完成主键自增长 create table stu( id i ...

  10. js--js实现基础排序算法

    前言 文本来总结常见的排序算法,通过 JvavScript  来实现 正文 1.冒泡排序 算法思想:比较相邻两个元素的大小,如果第一个比第二个大,就交换它们.从头遍历到尾部,当一轮遍历完后,数组最后一 ...