(未完成)

一、Cookie与Session的使用简介

1 Cookie

Cookie 用于记录用户在一段时间内的行为,它有两个版本:Version 0 和 Version 1,分别对应两种响应头 Set-Cookie 和 Set-Cookie2,但是 Servlet 规范中不支持 Set-Cookie2 响应头,在实际中 Set-Cookie2 的属性可以设置在 Set-Cookie 中。

Version 0 的属性如下

Version 1 的属性如下

当访问某个 URL 时,浏览器会根据 URL 将符合条件的 Cookie 放入请求头中,在服务器中通过 HttpServletResquest 的 getCookies() 方法可以获取到客户端发送来的 Cookie 对象的数组,Cookie 的方法如下:

  • public void setValue(String newValue) // 设置 Cookie 的值
  • public void setComment(String purpose) // 用来描述cookie的用途
  • public void setDomain(String pattern) // 指定cookie的域
  • public void setPath(String uri) // 指定的目录中的所有页面以及该目录的子目录中的所有页面都可以看到该cookie
  • public void setMaxAge(int expiry) // 设置最大过期时间,负值则储存在内存中,浏览器关闭时就过期
  • public void setVersion(int v) // 设置 Cookies 版本,0或1
  • public void setSecure(boolean flag) // cookie 是否仅使用安全协议发送,如HTTPS或SSL
  • public String getName()
  • public String getValue()
  • public String getComment()
  • public String getDomain()
  • public String getPath()
  • public int getMaxAge()
  • public int getVersion()
  • public boolean getSecure()
  • public Object clone()

如果需要创建一个 Cookie 对象,只需要 Cookie cookie = new Cookie("username", "tengyunhao") 即可创建,但是自己创建的 Cookie 的 name 不能和它自带属性值的名称一样,否则会抛出异常。当 Cookie 的属性中出现 Version 1 的属性时,则响应头会将 Version 值设为1,属性中出现 TOKEN 字符时(如“\”、“,”等)也会设 Version 值为 1。

2 Session

Cookie 可以用来记录客户端的访问信息,但它储存在客户端中,每次请求时客户端都需要传输这些 Cookie,如果 Cookie 很多就增加了传输的负担,而使用 Session 可以解决这个问题。Session 储存在服务器中,每次客户端只需要传输一个 Session 的 ID,通过这个 ID 来找到客户端对应的 Session,这个 ID 通常以 JSESIONID 为名储存在 Cookie 中,这个 Cookie 储存在内存中,浏览器关闭则过期。

当收到请求时,如果从 Cookie(或请求参数)中能获取 JSESIONID 值,则根据这个值查找 session 对象,如果获取不到 JSESIONID 值或 session 对象已经过期,则创建一个新的 session 对象,并 JSESIONID 值设置到响应头中。HttpSession 是一个接口,它的方法如下:

  • public String getId();
  • public long getCreationTime(); // 返回 session 创建时间
  • public long getLastAccessedTime(); // 客户端最后请求时间
  • public void setMaxInactiveInterval(int interval); // 设置超时时间,单位为秒
  • public int getMaxInactiveInterval();
  • public ServletContext getServletContext();
  • public Enumeration getAttributeNames();
  • public Object getAttribute(String name);
  • public void setAttribute(String name, Object value);
  • public void removeAttribute(String name);
  • public void invalidate(); // 销毁当前 session
  • public boolean isNew();

二、分布式的 Session 框架

从上面可以知道 Session 和 Cookie 各自优点和缺点,在大型的互联网系统中,单独使用两者都不可行。

[Java] Servlet工作原理之二:Session与Cookie的更多相关文章

  1. Java Servlet 工作原理问答

    导读 本文来自stackoverflow的问答,讨论了Java Servlet的工作机制,如何进行实例化.共享变量和多线程处理. 问题:Servlet是如何工作的?Servlet 如何实例化.共享变量 ...

  2. 【译】Stackoverflow:Java Servlet 工作原理问答

    导读 本文来自stackoverflow的问答,讨论了Java Servlet的工作机制,如何进行实例化.共享变量和多线程处理. 问题:Servlet 是如何工作的?Servlet 如何实例化.共享变 ...

  3. [Java] Servlet工作原理之一:体系结构及其容器

    一.Servlet体系结构 在 servlet-api.jar (2.5) 中有两个包:javax.servlet 和 javax.servlet.http             1 Servlet ...

  4. [Java] SpringMVC工作原理之二:HandlerMapping和HandlerAdapter

    一.HandlerMapping 作用是根据当前请求的找到对应的 Handler,并将 Handler(执行程序)与一堆 HandlerInterceptor(拦截器)封装到 HandlerExecu ...

  5. [Java] SpringMVC工作原理之一:DispatcherServlet

    一.DispatcherServlet 处理流程 在整个 Spring MVC 框架中,DispatcherServlet 处于核心位置,它负责协调和组织不同组件完成请求处理并返回响应工作.在看 Di ...

  6. HTTP协议 Servlet入门 Servlet工作原理和生命周期 Servlet细节 ServletConfig对象

    1 HTTP协议特点   1)客户端->服务端(请求request)有三部份     a)请求行--请求行用于描述客户端的请求方式.请求的资源名称,以及使用的HTTP协议版本号 请求行中的GET ...

  7. JSP+JavaBean+Servlet工作原理实例…

    JSP+JavaBean+Servlet工作原理实例讲解 首先,JavaBean和Servlet虽都是Java程序,但是是完全不同的两个概念.引用mz3226960提出的MVC的概念,即M-model ...

  8. Java虚拟机工作原理详解 (一)

    一.类加载器 首先来看一下java程序的执行过程. 从这个框图很容易大体上了解java程序工作原理.首先,你写好java代码,保存到硬盘当中.然后你在命令行中输入 javac YourClassNam ...

  9. Java虚拟机工作原理详解

    原文地址:http://blog.csdn.net/bingduanlbd/article/details/8363734 一.类加载器 首先来看一下java程序的执行过程. 从这个框图很容易大体上了 ...

随机推荐

  1. stl源码剖析 详细学习笔记deque(3)

    protected: typedef simple_alloc<value_type,Alloc> data_allocator; //用来配置元素的alloc typedef simpl ...

  2. Azure : 通过 SendGrid 发送邮件

    SendGrid 是什么? SendGrid 是架构在云端的电子邮件服务,它能提供基于事务的可靠的电子邮件传递.并且具有可扩充性和实时分析的能力.常见的用例有:1. 自动回复用户的邮件2. 定期发送信 ...

  3. 关于使用单片机读取外部电压ADC阻抗匹配的问题

    单片机的基准电压一般为3.3V,如果外部信号超过了AD测量范围,可以采用电阻分压的方法,但是要注意阻抗匹配问题.比如,SMT32的模数输入阻抗约为10K,如果外接的分压电阻无法远小于该阻值,则会因为信 ...

  4. win10引导错误的修复(内容系转载)

    #!尊重原作者,再此声明此内容属于网络转载,只是为了能保留下来方便日后查阅!!! win10误删引导文件,0xc0000098的解决方案,bcd引导文件受损情况分析 一.※相对简单的解决方法,对应的情 ...

  5. ag使用需要注意的问题

    1.  set env 对比服务器标准配置,修改本地 /etc/apache2/sites-available/default (远程链接服务器的办法: ssh 12x.xxx.xxx.xxx) 2. ...

  6. PAT甲题题解-1121. Damn Single (25)-水题

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789787.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  7. team330团队铁大兼职网站使用说明

    项目名称:铁大兼职网站 项目形式:网站 网站链接:http://39.106.30.16:8080/zhaopinweb/mainpage.jsp 开发团队:team330 网站上线时间:2018年1 ...

  8. beta圆桌2!

    031602111 傅海涛 1.今天进展 文档转换差不多完成 2.存在问题 无 3.明天安排 增加新功能和完善之前的功能 4.心得体会 接口真难 031602115 黄家雄 1.今天进展 考了六级 2 ...

  9. PAT 1064 朋友数

    https://pintia.cn/problem-sets/994805260223102976/problems/994805267416334336 如果两个整数各位数字的和是一样的,则被称为是 ...

  10. [Delphi]实现使用TIdHttp控件向https地址Post请求[转]

    开篇:公司之前一直使用http协议进行交互(比如登录等功能),但是经常被爆安全性不高,所以准备改用https协议.百度了一下资料,其实使用IdHttp控件实现https交互的帖子并不少,鉴于这次成功实 ...