接着上篇的Servlet总结,本篇文章来总结下 Cookie 和 Session


一、会话介绍

1、什么是会话?

从打开浏览器,到访问页面,到最终关闭浏览器 ,整个过程就是一次会话

2、会话的特性:
  • 一个会话中可能包含多个请求
  • 一次完整的会话只针对一个用户
3、会话管理技术:
  • Cookie 技术:客户端技术
  • Session技术:服务器技术

二、Cookie 技术:客户端技术

1、什么是Cookie

  • Cookie是HTTP协议的规范之一,它是服务器和客户端之间传输的小数据。
  • Cookie就是服务器保存在客户端的数据!(类似于会员卡,保存在用户手中(客户端))
  • Cookie是一个键值对!

2、Cookie的常用用途

  • 站点跟踪特定访问者访问的次数,最后访问的时间以及访问者进入站点的路径;
  • 帮助站点统计用户个人资料以实现各种各样的个性化服务。
  • 实现自动登录功能

3、Cookie的执行原理

  • 第一次访问服务器,服务器会增加Set-Cookie头字段,将Cookie信息发送给浏览器,并保存在客户端。
  • 当后续访问服务器时,会在请求消息中将用户信息以Cookie的形式发送给服务器,从而使服务器端分辨出当前请求是由哪个用户发出的。

类 javax.servlet.http.Cookie 表示cookie

获取Cookie信息的方法:

getName()名称,
getValue()值,
getPath()cookie所在的目录,
getDomain()有效域
getMaxAge()有效时间,
getSecure()只能使用安全的协议

设置Cookie信息的方法:

setValue(),
setPath(),
setDomain(),
setMaxAge()设置在客户端硬盘上保存的最大时间,单位为秒

从请求中获取Cookie:

 Cookie[] HttpServletRequest.getCookies( )

向响应中添加cookie:

HttpServletResponse.addCookie("name","value")

4、向客户端写入Cookie

1、创建Cookie

Cookie c=new Cookie("name", "value");

2、设置Cookie的属性

c.setMaxAge(60*60*24);
c.setDomain("pdsu.edu.cn")
c.setPath("/")

3、调用 response 的 addCookie 方法将其写入到客户端

response.addCookie(c)

5、读取Cookie的步骤

从客户端读取所有能够被本服务器读取的Cookie:

Cookie[] cookies=request.getCookies();

从中找出需要的Cookie:

for(int i=0;i<cookies.length;i++) {if( cookies[i].getName().equals(“wanted”) ){......}
}

:使用Cookie对象实现欢迎信息,当用户第一次访问应用时显示欢迎信息,并提示第1次访问,依次类推。

代码如下:

package cn.servlet;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class IndexServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");Cookie[] cookies = request.getCookies();Integer integer = 0;if (cookies != null) {for (int i = 0; i < cookies.length; i++) {if ("A".equals(cookies[i].getName())) {integer = Integer.parseInt(cookies[i].getValue());}}}integer++;Cookie cookie = new Cookie("A", integer + "");if (integer <= 1) {response.getWriter().append("欢迎A").append("首次访问本网站");} else {response.getWriter().append("欢迎A第").append(integer + "").append("次访问本网站");}cookie.setMaxAge(10);response.addCookie(cookie);}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

三、Session技术:服务器技术

1、什么是Session技术

  • 一种会话管理技术,将会话中的数据保存到服务器端。
  • 是基于会话级别的cookie实现的。
  • 通俗的讲session技术就好比医院发放给病人的就医卡和医院为每个病人保留病例档案的过程,病人去医院看病,只需要出示就医卡,医生根据卡号可以查到病人的就诊信息。
  • 当浏览器访问服务器时,Servlet容器就会创建一个Session对象和ID属性,其中,Session对象就相当于病历档案,ID就相当于就医卡号,在后续访问时,只要将标识号传递给服务器,就能判断出是哪个客户端发送的,从而选择与之对应的Session对象为其服务, 通常情况下Session是借助Cookie技术来传递ID属性的。

2、Session实现原理

图解:


  • session中的数据可以被一个用户在一次会话中共享。

  • 每个人的session是不同的。


  • session_id的检索和创建:

3、Session会话

1、什么是会话跟踪技术?

  • HTTP是无状态协议,也就是没有记忆力的协议,每个请求之间无法共享数据。这就无法知道会话什么时候开始,什么时候结束,也无法确定发出请求的用户身份。这说明需要使用额外的手段来跟踪会话!
  • 在一个会话中共享数据即会话跟踪技术

2、会话追踪过程可划分为:

3、常用的会话追踪机制有:

  1. Cookies
    特点:最常用
    原理:引擎把用户会话ID保存在cookie中,保存到客户端,在以后的请求中把这个cookie发送给服务器

  2. URL重写
    特点:性能最低
    使用情况:客户端不能接受cookie时
    原理:把session id写入URL中,这样的URL会被引擎解析和某个session相关联
    例子:http://www.myser.com/catalog/index.htm;jsessionid=1234

  3. 表单隐藏
    原理:利用HTML内hidden的属性,把客户端的信息,在用户不察觉的情形下,偷偷地随着请求一起传送给到服务器处理
    使用:
    <input type="hidden" name="userID" value="15">
    优点:session数据传送到服务器端时,不会将session数据暴露在URL之上
    缺点:用户直接观看HTML的源文件,session数据将会暴露无疑

4、会话追踪机制比较:


5、会话管理机制:

  1. 创建会话:
  • HttpServletRequestgetSession( )方法,若有会话则返回当前会话,没有则创建新会话
  • getSession(true) 和上面执行同样的功能。
  • getSession(false)访问一个现有的会话、而不是新创建一个会话,如果没有合法的会话则返回null

例:

  HttpSession session=request.getSession(true)
  1. 存储和访问会话属性:
  • 标准会话属性包括:会话标识符、数据、创建时间、上次访问时间等,都以“名-值”对形式保存
  • HttpSession提供了一种把对象存储到内存、在同一用户的后继请求中提取这些对象的标准办法
  • 在会话中保存数据的方法:setAttribute(String s, Object o)
  • 从会话提取原来所保存对象的方法: getAttribute(String s)
  1. 关闭会话:

1.显式关闭:HttpSession.invalidate( )

2.隐式关闭—会话超时(等待超时自动操作)

  • 默认的超时时间间隔是1800秒
  • 无效之前,可以使用setInactiveInterval(int seconds)方法在客户请求之间控制这个时间间隔。
  • 设置负值可以确保会话永远不会超时

4、Session常用方法

getAttribute()从session中获取以前存储的值
setAttribute()将键与值关联起来,存储进session
removeAttribute()删除session中存储的对应键的值
invalidate()删除整个session及其存储的键值
logout()注销当前用户
getId()获取每个session对应的唯一ID
getCreationTime()获取session创建的时间
getLastAccessedTime()获取session最后被访问的时间
getMaxInactiveInterval()在用户没有访问的情况下,会话在被自动废弃之前应该保持多长时间
getAttributeNames()返回session中所有属性的名称

5、Session监听器:

作用:监听对象的动作(创建、销毁等)和状态

  • 创建的新的session对象
  • 销毁session对象

要实现session监听器, 需要实现 javax.servlet.http.HttpSessionListener 接口

Java web—Cookie与Session对象相关推荐

  1. Java Web应用(JSP/Session/Cookie)

    JSP JSP本质上就是一个Servlet,JSP主要负责与用户交互,将最终的界面呈现用户,HTML+JS+Java的混合文件.-->前后端不分离 原理:当服务器接收到后缀.jsp文件请求时,将 ...

  2. Java使用cookie和session管理用户状态

    一个做移动端的,要做服务端的一些工作,没办法,工作还的继续,这就是生活,废话不说,总结一下这一天的东西,逆水行舟,努力,努力. Java什么是状态管理 一般我们会将浏览器与服务器之间多次的交互当作一个 ...

  3. Java Web 九大内置对象(一)

    在Jsp 中一共定义了九个内置对象,分别为: *request            HttpServletRequest; *response          HttpServletRespons ...

  4. java web 里的JSP 对象的简单了解

    1.基本的组成元素 page指令                 <%@ page ..........%>                   1-1.  language---当前页面 ...

  5. java session 永不过期_Java Web Application使Session永不失效(利用cookie隐藏登录)

    在做 Web Application 时,因为 Web Project 有 session 自动失效的问题,所以如何让用户登录一次系统就能长时间运行三个月,就是个问题. 后来,看到 session 失 ...

  6. cookie 和 session 详解

    cookie 和 session 详解 文章目录 cookie 和 session 详解 一.Cookie机制 1.Cookie引入 2.什么是Cookie 3.Cookie的不可跨域名性 4. Un ...

  7. Cookie和Session的区别详解

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

  8. 不得不看的cookie和session

    尽最大努力的网络干货 前言 HTTP服务器是无状态的,这简化了服务器的设计,并且允许工程师们去开发同时处理数以万计的tcp连接的高性能web服务器.然而一个web站点希望能够识别用户,可能是服务器希望 ...

  9. Cookie和Session专题

    一.cookie机制和session机制的区别 **************************************************************************** ...

最新文章

  1. 乌云爆告之双十一电商的安全警示
  2. 25种用户十秒离开你网站的原因!
  3. 思科模拟器32位_三款另类的68k Mac模拟器
  4. 一个ApplicationContext.xml的配置
  5. 剑指offer:变态跳台阶
  6. ResourceBundle的路径问题
  7. .NET Core TDD 前传: 编写易于测试的代码 -- 全局状态
  8. 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)
  9. 8年测试经验,用例设计竟然不知道状态图法?
  10. 7-5 素数判断 (10 分)
  11. 深入跨国互联网业务场景,看华为云数智融合元数据如何打破“数据墙”
  12. 菜单向上拉html,模拟select控件,CSS上拉菜单
  13. 国二C语言大题评分,计算机二级C语言题型和评分标准
  14. access升级mysql_将现有的Access数据库升级为SQL
  15. Java-对象及变量的并发访问小结
  16. 用户控件中图片路径问题(用户控件、图片路径) ,ResolveUrl
  17. 联想IBM ThinkPad 笔记本BIOS设置手册
  18. Cubieboard CC-A80性能之Ubuntu Linaro编译安装Node.js
  19. Web API数据传输加密
  20. 深度学习-历史发展历程

热门文章

  1. 【机器学习算法专题(蓄力计划)】十三、机器学习中线性回归
  2. keras从入门到放弃(十五)图片数据增强
  3. keras从入门到放弃(十四)模型的保存
  4. python与 积分
  5. 机器学习认识聚类(KMeans算法)
  6. 虚拟机中Ubuntu不能联网----
  7. 小马智行Pony.ai 2020校招宣讲行程来了!
  8. Nature论文解读:用于改善加权生物网络信噪比的网络增强方法
  9. DeepLabv3+:语义分割领域的新高峰
  10. Struts2-向值栈中存放数据