一、Session简单介绍
在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
HTTP协议 ( http://www.w3.org/Protocols/ )是“一次性单向”协议。
服务端不能主动连接客户端,只能被动等待并答复客户端请求。客户端连接服务端,发出一个HTTP Request,服务端处理请求,并且返回一个HTTP Response给客户端,本次HTTP Request-Response Cycle结束。
我们看到,HTTP协议本身并不能支持服务端保存客户端的状态信息。于是,Web Server中引入了session的概念,用来保存客户端的状态信息。
这里用一个形象的比喻来解释session的工作方式。假设Web Server是一个商场的存包处,HTTP Request是一个顾客,第一次来到存包处,管理员把顾客的物品存放在某一个柜子里面(这个柜子就相当于Session),然后把一个号码牌交给这个顾客,作为取包凭证(这个号码牌就是Session ID)。顾客(HTTP Request)下一次来的时候,就要把号码牌(Session ID)交给存包处(Web Server)的管理员。管理员根据号码牌(Session ID)找到相应的柜子(Session),根据顾客(HTTP Request)的请求,Web Server可以取出、更换、添加柜子(Session)中的物品,Web Server也可以让顾客(HTTP Request)的号码牌和号码牌对应的柜子(Session)失效。顾客(HTTP Request)的忘性很大,管理员在顾客回去的时候(HTTP Response)都要重新提醒顾客记住自己的号码牌(Session ID)。这样,顾客(HTTP Request)下次来的时候,就又带着号码牌回来了。
我们可以看到,Session ID实际上是在客户端和服务端之间通过HTTP Request和HTTP Response传来传去的。
二、Session和Cookie的主要区别
Cookie是把用户的数据写给用户的浏览器。
Session技术把用户的数据写到用户独占的session中。
Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。
三、session实现原理
服务器是如何实现一个session为一个用户浏览器服务的?
服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session id过来了,就会使用内存中与之对应的session为之服务。
1. session 过期情况:
1>. 客户端浏览器关闭:
2>. session 会话过期;
3>. 客户端会话调用了 .invalidate();
2. 浏览器关闭与session是否还在;
当客户端浏览器关闭后,session 在服务端还是会存在一定时间的,只是当浏览器器再次打开时,就会生成一个新的 session ,浏览器通过生成的 sessionid 属性来 匹配服务端的 session; 那上次的session 虽然还在,但是就访问不到了;
3. <% @ page session="false" %> 是什么情况?:
这句话的意思是,当前不能使用 session, 但是 页面 session 还是可以创建的;
4. session 在什么时候 被创建:
在 程序 调用 HttpServletRequest.getSession(true) 时创建;如果 页面没有使用 <%@ page session="false"%> 时,在 jsp 页面编译成 Servlet 时,会自动 加上 HttpSession session = HttpServletRequest.getSession(true);
关于 tomcat 集群中 session 共享的三种方法
前两种均需要使用 memcached 或redis 存储 session ,最后一种使用 terracotta 服务器共享。
1、使用 filter 方法存储
这种方法比较推荐,因为它的服务器使用范围比较多,不仅限于tomcat ,而且实现的原理比较简单容易控制。
可以使用memcached-session-filter
2、使用 tomcat sessionmanager 方法存储
3、使用 terracotta 服务器共享
相关推荐
在Java Web开发中,...而"java购物车session"这个资源则提供了一个基础的实现,适合初学者学习和练习。通过分析和修改这个项目,你可以深入理解session的用法,以及如何在Java Web环境中构建一个基本的购物系统。
本小demo以JSP为基础,旨在帮助初学者理解并掌握Session的使用方法。 首先,我们来解释一下什么是Session。Session是服务器端存储的一个数据结构,用于保存用户特定的信息,比如用户的登录状态、购物车内容等。当...
Java工程师在应聘过程中,需要扎实的Java基础知识作为支撑。这些基础涵盖了多个方面,例如多线程、企业级JavaBean(EJB)、JavaServer Pages(JSP)和Servlet等。了解并掌握这些知识点对于成为一名合格的Java开发...
Java Web开发中的Session对象是HTTP协议中用于跟踪用户状态的重要工具。在Web应用程序中,由于HTTP协议本身是无状态的,即服务器无法识别同一客户端的多次请求,因此无法实现如登录状态保持这样的功能。为了解决这个...
3. EJB:EJB是Java EE中处理业务逻辑的核心组件,分为会话bean(Session Beans)和实体bean(Entity Beans)。会话bean负责业务逻辑,实体bean则对应数据库中的持久化对象。 4. JPA和Hibernate:JPA是Java规范,...
在Java Web应用开发中,Struts2框架提供了一种非常实用的方法来解决这个问题——通过使用`tokenSession`拦截器。相比于传统的`token`拦截器,`tokenSession`提供了更加灵活和友好的用户体验。本文将深入探讨`token...
根据提供的文件信息,我们可以从中提炼出以下关于Java的基础知识点: ### 1. Java 基础概念 在Java中,存在多种数据类型和结构,包括基本数据类型和引用类型。文件中提到了“圈子”(可能是指类或对象),以及初始...
EJB(Enterprise JavaBeans)是Java EE平台的核心组件之一,用于构建可部署在服务器端的企业级应用。EJB包括Session Beans、Message-driven Beans和Entity Beans,分别处理业务逻辑、消息处理和持久化数据。"EJB方面...
首先,Servlet是Java EE中的核心组件之一,它是一个服务器端的小型Java程序,用于接收和响应HTTP请求。Servlet可以处理动态内容,与静态HTML页面配合,构建功能丰富的Web应用。在郑阿奇的教程中,可能会详细讲解如何...
Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...
在Java编程领域,面试题常常围绕基础概念、最佳实践以及注意事项。以下是一些常见的Java面试知识点的详细解释: 1. **面向对象的特征** - **抽象**:抽象是将复杂的现实问题简化为一系列概念,忽略不重要的细节,...
在JavaWeb开发中,Cookie和Session是两种常见的用户会话管理技术,用于在客户端和服务器之间传递信息。本文将深入探讨这两个概念,并通过一个简单的登录案例来阐述它们的使用。 首先,Cookie是服务器发送到用户...
在Java编程中,Session是Web开发中的一个关键概念,它主要用于在客户端和服务器之间保持状态。...为了克服这个问题,Session机制应运而生。...理解并熟练掌握Session的使用,是每个Java Web开发者的基础技能。
Java面试题必备——Java基础知识部分汇总 本文总结了Java基础知识部分的重要知识点,涵盖了Java面试中常见的问题,包括作用域、String类、int和Integer的区别、String和StringBuffer的区别、运行时异常与一般异常的...
Java 基础面试题 本资源摘要信息涵盖了 Java 基础知识点,包括面向对象的特征、String 和 StringBuffer 的区别、运行时异常与一般异常的区别、Servlet 生命周期、ArrayList、Vector 和 LinkedList 的存储性能和特性...
JAVA相关基础知识广泛涵盖了面向对象编程的核心概念、Java语言的特有元素以及一些常用类库的使用与区别。以下是详细的解析: 面向对象编程的四大特征包括抽象、继承、封装和多态性。抽象是指通过忽略非关键细节而将...
它提供了丰富的API,用于执行各种Redis命令,如设置和获取键值、订阅发布等,是我们实现Session存储在Redis中的基础。 2. commons-pool2-2.4.2.jar:Apache Commons Pool 2,是一个对象池库,用于管理资源,例如...
Java 2 EE 基础笔记大全 Java EE Web 开发中的 JSP 基础语法 在 Java EE Web 开发中,JSP(Java Server Pages)是一种动态网页技术,允许开发者在 HTML 中嵌入 Java 代码,以生成动态网页内容。JSP 语法是基于 ...
【Java基础测试题目详解】 1. **面向对象的特征** - **抽象**:抽象是面向对象编程的核心概念,它允许我们关注问题的关键部分,忽略不重要的细节。抽象分为过程抽象和数据抽象。过程抽象是将一个复杂的过程简化为...
Java 基础知识点 Java 是一种面向对象的编程语言,它具有抽象、继承、封装、多态性等特征。下面是 Java 基础知识点的详细解释: 1. 面向对象的特征: 面向对象编程的四个基本特征是抽象、继承、封装和多态性。 *...