Java Session会话追踪原理深入分析

目录
  • 一、会话技术
  • 二、Session
    • 1.原理
    • 2.特点
    • 3.获得一个会话对象
    • 4.Session常见方法
  • 三、Cookie和Session的区别

一、会话技术

客户端和服务器通信的过程中,自然而然的会产生一些数据交互。比如,A用户登录了邮箱,那么web服务器该怎么知道C一段时间后的登录状态呢?虽然HttpServletRequest对象和ServletContext对象都可以保存数据,但是不适用于这种情况。

  • 客户端的每次请求,服务器都会产生一个HttpServletRequest对象,该对象只保存请求所传递的数据。
  • 用一个WEB应用共享一个ServletContext对象,所以当多个用户登录时就有可能会造成数据混淆。

当浏览器向ServletB发出请求时,它的登陆操作已经完成了,但是却没有留下任何依据能够证明它已经成功登陆。以至于ServletB对他的登陆状态无法判别,这种情况叫用户状态的丢失。造成这种结果的原因是http协议的无状态;

为了解决这个问题,Servlet提供了会话跟踪技术来追踪用户状态,简单的说就是指将用户操作过的重要业务步骤记录下来,以便在后续的处理中使用。

二、Session

1.原理

客户端浏览器第一次访问,服务器端创建一个会话对象。并且具有id的唯一值。依赖cookie将sessionId的值发送给客户端。第二次请求的时候,客户端浏览器携带sessionId到服务器。服务器端获得sessionId,从而实现了会话跟踪。

2.特点

创建在服务器端,并且保存在服务器端 。

3.获得一个会话对象

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/testsession.do")
public class testSessionServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("testSessionServlet被请求到了");
		HttpSession session = req.getSession();
        //当调用getSession(true)时,他首先检查用户的会话Cookie是否存在
        //如果不存在:为其创建新的session对象,将session对象的ID保存到新建的会话Cookie中,并            将会话cookie送回浏览器 。
        //如果存在:则按照会话Cookie 的值找到对应的session对象返回。
        System.out.println(session.getId());
	}
}

4.Session常见方法

// 获取Session
HttpSession session = request.getSession();
// 将指定Key-Value键值对,存入当前Session会话中。
void setAttribute(String name, Object value);
// 按照指定的Key从当前Session会话中获取Value,返回值为Object类型的对象,如果不存在,则返回null。
Object getAttribute(String name);
// 按照指定的Key从当前Session会话中删除Key-Value键值对。
void removeAttribute(String name);
// 获取当前Session会话的创建时间。
long time = session.getCreationTime();
// 获取当前Session会话最后一次请求的访问时间。
long lastAccessedTime = session.getLastAccessedTime();
// 获取当前Session会话的SESSION ID
String id = session.getId();
//设置最大有效时间,以秒为单位
session.setMaxInactiveInterval(100);
// session失效
session.invalidate();

三、Cookie和Session的区别

  1. 保存的位置不同:cookie保存在浏览器端,session保存在服务端。
  2. 使用方式不同:cookie如果在浏览器端对cookie进行设置对应的时间,则cookie保存在本地硬盘中,此时如果没有过期,则就可以使用,如果过期则就删除。如果没有对cookie设置时间,则默认关闭浏览器,则cookie就会删除。session:我们在请求中,如果发送的请求中存在sessionId,则就会找到对应的session对象,如果不存在sessionId,则在服务器端就会创建一个session对象,并且将sessionId返回给浏览器,可以将其放到cookie中,进行传输,如果浏览器不支持cookie,则应该将其通过encodeURL(sessionID)进行调用,然后放到url中。
  3. 存储内容不同:cookie只能存储字符串,而session存储结构类似于hashtable的结构,可以存放任何类型。
  4. 存储大小:cookie最多可以存放4k大小的内容,session则没有限制。
  5. session的安全性要高于cooKie
  6. cookie的session的应用场景:cookie可以用来保存用户的登陆信息,如果删除cookie则下一次用户仍需要重新登录;session就类似于我们拿到钥匙去开锁,拿到的就是我们个人的信息,一般我们可以在session中存放个人的信息或者购物车的信息。
  7. session和cookie的弊端:cookie的大小受限制,cookie不安全,如果用户禁用cookie则无法使用cookie。如果过多的依赖session,当很多用户同时登陆的时候,此时服务器压力过大。sessionId存放在cookie中,此时如果对于一些浏览器不支持cookie,此时还需要改写代码,将sessionID放到url中,也是不安全。

到此这篇关于Java Session会话追踪原理深入分析的文章就介绍到这了,更多相关Java Session会话追踪内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java中Session的详解

    目录 1.什么是session: 2.session的经典应用场景: 3.session中常用的方法 4.举例 5.session与cookie的区别 1.什么是session: 服务器会给每一个用户(浏览器)创建一个session对象 一个session独占一个浏览器,只要浏览器不关闭,这个session就一直存在 session称为会话控制,存储用户会话所需的属性和配置信息,这样,用户在应用程序的web页面跳转时,存储在session对象中的用户信息不会丢掷,而是在整个用户会话中一直保持下去

  • java中的session对象如何获取

    目录 获取session对象 1.在springmvc中 2.通过ServletActionContext获取 在session存取值和对象的方法 获取session对象 1.在springmvc中 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); 2.通过ServletActionContext获取 HttpSer

  • Java中Cookie和Session详解及区别总结

    目录 会话技术 Cookie 概念 快速入门 实现原理 cookie的细节 Cookie的特点和作用 案例:记住上一次访问时间 分析 代码实现 Session 概念 快速入门 原理 细节 Session的特点 Session与Cookie的区别 会话技术 会话:一次会话中包含多次请求和响应. 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 功能:在一次会话的范围内的多次请求间,共享数据 方式: 客户端会话技术:Cookie 服务器端会话技术:Session Cookie

  • Java全面细致讲解Cookie与Session及kaptcha验证码的使用

    目录 Cookie 1. 概念 2. 创建Cookie 3. 服务器获取Cookie 4. Cookie的修改 5. Cookie的生命控制 6. Cookie的有效路径Path 7. Cookie应用-免用户名密码登录 Session 1. 概念 2. 创建和获取Session 3. Session域数据的存取 4. Session的生命周期的控制 5. 浏览器和Session的关联 kaptcha验证码 1. 使用 2. 验证码的切换 Cookie 1. 概念 是服务器通知客户端保存键值对的

  • java web项目Session获取不到问题及解决

    目录 java web项目Session获取不到 关于session的生命周期 前后端分离获取不到session问题 解决方案 java web项目Session获取不到 在servlet类中对Session进行了设置 但当servlet跳转到页面时 页面获取不到Session!!! 关于session的生命周期 Session保存在服务器端.Session在用户第一次访问服务器的时候自动创建.需要注意只有访问JSP.Servlet等程序时才会创建Session,只访问HTML.IMAGE等静态

  • Javaweb会话跟踪技术Cookie和Session的具体使用

    目录 前言 一.会话引入 二.Cookie 1.Cookie的理解 2.Cookie生命周期 3.Cookie有效路径 4.Cookie使用细节 三.Session 1.Session基本原理 2.Session的理解 3.Session基本使用 4.Session底层 5.Session生命周期 前言 纸上得来终觉浅,绝知此事要躬行 一.会话引入 什么是会话?会话用来识别不同的客户端,客户端和服务器之间发生的一系列连续的请求和响应的过程,当我们打开浏览器,点击多个链接,访问服务器多个web资源

  • JavaWeb详细讲述Cookie和Session的概念

    目录 1.会话 2.保存会话的两种技术 3.Cookie 4.Session 1.会话 会话: 用户打开了一个浏览器,点击了很多超链接,访问多个web次元,关闭浏览器,这个过程可以称之为会话 有状态会话: 带有访问记录的会话 1.服务端会给客户端一个cookie,客户端下次访问时携带cookie访问就可以了 cookie 2.服务端登记客户端访问过,下次访问时匹配到客户端: session 2.保存会话的两种技术 cookie 客户端技术(响应,请求) session 服务器技术,利用这个技术,

  • Java Session会话追踪原理深入分析

    目录 一.会话技术 二.Session 1.原理 2.特点 3.获得一个会话对象 4.Session常见方法 三.Cookie和Session的区别 一.会话技术 客户端和服务器通信的过程中,自然而然的会产生一些数据交互.比如,A用户登录了邮箱,那么web服务器该怎么知道C一段时间后的登录状态呢?虽然HttpServletRequest对象和ServletContext对象都可以保存数据,但是不适用于这种情况. 客户端的每次请求,服务器都会产生一个HttpServletRequest对象,该对象

  • Java Web会话技术Session的简单使用

    什么是Session Session技术是将信息保存在服务端,而客户端需要接收.记录和回送Session的ID,所以Session通常情况下是借助Cookie技术来传递ID给服务端的,服务端拿到session id之后查询内存中对应的记录. 一个客户端对应一个Session,而一个Session有多个Attribute,每一个Attribute有唯一的name. 编写代码证明提出的观点: protected void doGet(HttpServletRequest req, HttpServl

  • Tomcat实现session共享(session 会话复制)

    一.如何保持session会话 目前,为了使web能适应大规模的访问,需要实现应用的集群部署.集群最有效的方案就是负载均衡,而实现负载均衡用户每一个请求都有可能被分配到不固定的服务器上,这样我们首先要解决session的统一来保证无论用户的请求被转发到哪个服务器上都能保证用户的正常使用,即需要实现session的共享机制. 在集群系统下实现session统一的有如下几种方案: 1.请求精确定位:session sticky,例如基于访问ip的hash策略,即当前用户的请求都集中定位到一台服务器中

  • JavaWeb Session 会话管理实例详解

    Session会话简介 会话是指在一段时间内,用户使用同一个浏览器进程与Web应用之间的交互过程. 会话(Session)通常用来跟踪用户的状态,缓存用户在此浏览器进程中的信息. 当用户关闭浏览器,上一个Session也就无法再次获得了(Cookie的maxAge为-1的情况).再次打开新的浏览器,将开始一个新的会话. 类javax.servlet.http.HttpSession.每一个HttpSession代表用户的一个会话. 每一个Session的过期时间默认为30分钟. 当浏览器第一次访

  • PHP session会话操作技巧小结

    本文实例总结了PHP session会话操作技巧.分享给大家供大家参考,具体如下: 会话技术 session 将会话数据存储与服务器端,同时使会话数据可以区分浏览器 为每个会话数据建立独立的会话数据区(来存储当前会话的全部数据),每个会话数据区存在唯一的标志,同时浏览器端存储该唯一标识配对使用. 响应时给浏览器的session-id值也存储于浏览器端的cookie数据区. php.ini: session.auto_start = 0 session_start(); 增删改查都是使用$_SES

  • java中TESTful架构原理分析

    目录 1. 什么是REST 2. 理解RESTful 2. 1 资源与URI 2. 2 统一资源接口 GET POST PUT DELETE 2. 3 资源的表述 在URI里边带上版本号 使用URI后缀来区分表述格式 如何处理不支持的表述格式 2. 4 资源的链接 2. 5 状态的转移 2. 5.1 应用状态与资源状态 2. 5.2 应用状态的转移 3. 总结 1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征

  • java编程SpringSecurity入门原理及应用简介

    目录 1. SpringSecurity 框架简介 1.1 概要 1.2 组成以及同款产品(shiro)对比 1.2.1 Spring Security 1.2.2 Shiro 1.3 模块划分 1.4 SpringSecurity 基本原理 1.5.UserDetailsService 接口讲解 2.SpringSecurity Web 权限方案 2.1设置登录系统的账号密码(三种方式) 设计数据库表 建立springboot项目,勾选相应依赖 完整pom.xml 数据库配置 创建对应的实体类

  • Java NIO Buffer实现原理详解

    目录 1.Buffer的继承体系 2.Buffer的操作API使用案例 3.Buffer的基本原理 4.allocate方法初始化一个指定容量大小的缓冲区 5.slice方法缓冲区分片 6.只读缓冲区 7.直接缓冲区 8.内存映射 1.Buffer的继承体系 如上图所示,对于Java中的所有基本类型,都会有一个具体的Buffer类型与之对应,一般我们最经常使用的是ByteBuffer. 2.Buffer的操作API使用案例 举一个IntBuffer的使用案例: /** * @author csp

  • java Spring的启动原理详解

    目录 引入 Spring启动过程 总结: 总结 引入 为什么突然说一下Spring启动原理呢,因为之前面试的时候,回答的那可谓是坑坑洼洼,前前后后,补补贴贴... 总而言之就是不行,再次看一下源码发掘一下... 在Spring Boot还没有广泛到家家在用的时候,我们都还在书写繁琐的配置,什么web.xml.spring.xml.bean.xml等等.虽然现在很少,可以说几乎没有企业在去使用Spring的老一套,而会去使用Spring Boot约定大于配置来进行快速开发,但是,Spring的也要

  • python+pytest接口自动化之session会话保持的实现

    目录 前言 一.session(会话) 二.会话保持 三.python进行session会话保持 总结 前言 在接口测试的过程中,经常会遇到有些接口需要在登录的状态下才能请求,否则会提示请登录,那么怎样解决呢?我们可以通过Cookie绕过登录,其实这就是保持登录状态的方法之一.那么今天笔者想讲通过session进行会话保持. 一.session(会话) session,即会话.那么什么又是会话?我们来看一下会话的生存周期就能大致明白,如下: 开始:客户端(通常是浏览器)-->发送第一个请求-->

随机推荐