会话概述

什么是会话

简单的理解:用户打开浏览器,点击多个超链接,访问Web服务器上多个资源,然后关闭浏览器,整个过程称之为一次会话。

需要解决的问题

每个用户在使用浏览器与服务器会话的过程中,会产生一些用户数据,如用户登陆标记,WEB应用程序必须要为每个用户在一次或多次会话过程中保存这些数据。

两种技术

  • Cookie
    Cookie是客户端技术,WEB应用程序把每个用户数据以Cookie的形式发送给各自的的浏览器,当用户使用浏览器再次访问WEB应用时,就会带上这些Cookie,这样,WEB应用可以为每个用户分别处理各自的数据了。
  • HttpSession
    简称Session,是服务器端技术,服务器在运行时为每个用户的浏览器创建一个其独享的HttpSession对象。由于用户各自独享session,所以可以把各自的数据存放在各自的session域中,当用户去访问当前web应用其他web资源时,其他web资源再从用户各自的session中取出数据为其服务。

    Cookie类

    1、javax.servlet.http.Cookie
    Cookie的属性:

  • name:必须的,Cookie名

  • value:必须的,Cookie名对应的数据
  • comment:可选,备注
  • path:默认值就是产生Cookie的Servlet对应的URI

有一个cookie它的路径是:/app/servlet/
当浏览器访问的新资源的路径是:/app/1.jsp
问?浏览器会将该cookie带给1.jsp吗?不会

当浏览器访问的新资源的路径是:/app/servlet/a/b/ServletDemo1
问?浏览器会将该cookie带给ServletDemo1吗?

总结:在访问一个资源时,带不带已有的cookie。访问的资源路径.startsWith(cookie的path),如果为true,则会带

如果把一个Cookie的path设置成了/app/,说明访问/app/下面的任何资源,都会带cookie过去。

  • domain:默认就是产生Cookie的Servlet所在的网站域名

    加入cookie的domain是www.baidu.com
    访问http://www.163.com带不带?不带

  • maxAge:标识cookie的生命周期。默认是一次会话

要想在客户端的缓存中保存住Cookie的数据,增大它的存活时间。单位是秒
如果取值为0,就是要删除之。

  • version:可选,Cookie的版本

2、服务器向客户端写Cookie
response.addCookie(Cookie cookie);对应设置响应头的“Set-Cookie”

3、获取客户端提交过来的Cookie
Cookie[] cookies = request.getCookies();接着遍历cookies数组确定所需的Cookie

4、如何唯一确定一个Cookie(有同名Cookie情况)
通过domain+path+name,可以确定唯一一个Cookie

5、其他

  • 一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器可以存储多个WEB站点提供的Cookie
  • 浏览器一般只允许存放300个cookies,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB
  • 如果创建一个Cookie,并发送到浏览器,默认情况是一个会话级别的cookie,即只存在浏览器的内存中。若需要存储在磁盘上则需要设置maxAge属性为大于0的数值,单位为秒。为0则是告诉浏览器删除该cookie。
  • 删除cookie时,path必须一致,否则删除不成功

HttpSession类

javax.servlet.http.HttpSession HttpSession技术实际上还是利用Cookie技术

1、获得HttpSession对象:

HttpSession session = request.getSession();

每一个HttpSession对象都有一个唯一的ID
为了标识每一个客户端,实际上向客户端写了一个特殊的Cookie:

  • 该Cookie的name为固定的“JSESSIONID”
  • 该Cookie的value为HttpSession对象的id
  • 该Cookie的path为当前应用路径

request.getSession()方法详解:

  • 如果用户带着一个名称叫做JSESSIONID的Cookie过来了,先按照ID到服务器内存中找对应的HttpSession对象,
  • 没找到或者浏览器没有带,则创建一个新的HttpSession对象,亦即有了新的ID,同时写给客户端JSESSION=sessionid;
  • 如果找到了,返回该HttpSession对象,继续为用户服务。

request.getSession(boolean b):如果b为true,作用等同于request.getSession()。 如果b为false,作用只是获取。找不到则返回null。

session.invalidate():立刻摧毁服务器中的HttpSession对象。

2、HttpSession本身是一个域对象

void setAttribute(String name,Object obj) 设置属性
void removeAttribute(String name) 移除属性
Object getAttribute(String name) 获取属性

3、HttpSession生命周期

3.1 客户端向服务器第一次发送请求的时候,request中并无sessionID.
3.2 此时server端会创建一个session对象,并分配一个sessionID,serssion对象会保存在服务器端。此时session的状态处于new state状态,如果调用session.isNew(),则返回true
3.3 当服务器段处理完毕后,将此sessionID,以Cookie的形式传到客户段。
3.4 当客户段再次发送请求时,会将sessionID 同request参数一起发送,传递给服务器端。
3.5 服务器端可以根据传递过来的sessionID将这次请求(request)与保存在服务器端的session对象联系起来,此时的session已不处于new state状态,如果调用session.isNew(),则返回false.
3.6 循环3-5 ,直到session超时或被销毁。

4、HttpSession对象的状态转换

HttpSession对象默认超时为30分钟。
4.1 更改HttpSession的默认超时时间:
在web.xml中配置

1
2
3
<session-config>
<session-timeout>1</session-timeout><!--单位为1分钟-->
</session-config>

JavaWeb基础 - 会话的更多相关文章

  1. JavaWeb基础: 会话技术简介

    会话技术 用户使用Web应用的过程实际是调用了一系列的Servlet来组合处理请求,从而完成整个业务流.不同Servlet组合起来为用户服务的时候就会遇到一个数据共享和传输的问题,如何让多个Servl ...

  2. JavaWeb基础—会话管理之Cookie

    一.什么是会话 打开浏览器,浏览各种资源,点击各种超链接,直至关闭浏览器,整个过程称为会话 二.会话管理的两种技术 1.Cookie 基于客户端.在客户端记录信息来确认用户身份.以cookie的形式写 ...

  3. JavaWeb基础—会话管理之Session

    一.什么是session session类似于客户端在服务器端的账户.使用Map存放 一个会话锁定一个用户(一般情况下是一个客户端,即一个浏览器独占一个session对象),即使使用浏览器访问其他程序 ...

  4. JavaWeb基础知识总结

    JavaWeb基础知识总结.   1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供 ...

  5. 超详细的Java面试题总结(四 )之JavaWeb基础知识总结

    系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 超详细的Java面试题总结(三)之Java集合篇常见问题 超详细的Java ...

  6. JavaWeb基础: ServletContext

    基本概念 Web容器在启动时,会为每个Web应用程序都创建一个对应的ServletContext对象,它代表当前Web应用. ServletContext(javax.servlet.http.Ser ...

  7. JavaWeb基础: 学习大纲

    JavaWeb基础: Web应用和Web服务器 JavaWeb基础: Tomcat JavaWeb基础:HTTP协议和基于Restful的架构 JavaWeb基础: Web工程配置文件 JavaWeb ...

  8. 关于java基础、多线程、JavaWeb基础、数据库、SSM、Springboot技术汇总

    作者 : Stanley 罗昊 本人自行总结,纯手打,有疑问请在评论区留言 [转载请注明出处和署名,谢谢!] 一.java基础 1.多态有哪些体现形式? 重写.重载 2. Overriding的是什么 ...

  9. javaweb基础(11)_cookie的会话管理

    一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...

随机推荐

  1. webpack安装与使用

    webpack: JavaScript 应用程序的静态模块打包器 安装webpack前需要搭建node环境: 1. 安装node.js(https://nodejs.org/en/), 安装完后会自动 ...

  2. 我的Tmux学习笔记

    0. 修改指令前缀 // ~/.tmux.conf ubind C-b set -g prefix C-a 1. 新建会话 tmux tmux new -s session-name // 可以设置会 ...

  3. Debian中CodeIgniter+nginx+MariaDB+phpMyAdmin配置

    本文不讲述软件安装过程,记述本人在Debia中配置CodeIgniter时遇到的问题及解决方法,希望能够为有需要的人提供帮助. 一.Debian版本及所需的软件 Debian 9.8 stretch ...

  4. Hexo博客部署到个人服务器

    本文跳过阿里云创建git仓库.hexo部署到github的步骤,有需要的可以移步下面博客地址查看: 在阿里云服务器上创建git远程仓库 使用Hexo建立博客 一.服务器相关配置 本文使用hexo在本地 ...

  5. PHP变量定义及工作原理

    1.变量定义: 通常学到的是,变量代表存储空间以及其中数据的一个“标识符”. 变量名 指向 变量值 更深入的说是 变量指向内存的一块区域 2.变量工作原理,通过画图分析法——内存空间 <?php ...

  6. php的基础知识(三)

    12.函数: 函数的功能: 定义:在真实的项目开发过程中,有些代码会重复利用,我们可以把它提出来,做成公共的代码,供团队来使用,这个我们封装的代码段,就是函数(功能). 优点: 1.提高代码的利用率. ...

  7. HyperLedger Fabric 1.4 kafka生产环境部署(11.1)

    11.1 Kafka模式简介       上一章介绍的Solo模式只存在一个排序(orderer)服务,是一种中心化结构,一旦排序(orderer)服务出现了问题,整个区块链网络将会崩溃,为了能在正式 ...

  8. Java中的File.separator用法

    在Windows下的路径分隔符和Linux下的路径分隔符是不一样的,当直接使用绝对路径时,跨平台会暴出“No such file or diretory”的异常. 比如说要在temp目录下建立一个te ...

  9. Java基础—IO小结(二)缓冲流与其它流的使用

    一.缓冲流的使用 每个字节流都有对应的缓冲流: BufferedInputStream / BufferedOutputStream 构造器: 方法摘要与对应节点流类似 使用缓冲流实现文件复制:实际中 ...

  10. git配置config记住密码

    设置记住密码(默认15分钟): git config --global credential.helper cache如果想自己设置时间,可以这样做: git config credential.he ...