在java WEB开发中,session既是重点又是难点,很多初学者都没有建立一个清晰的概念,希望通过下面这个示例对大家有所帮助。
在一个JavaWeb应用程序中新建2个jsp页面,名称分别为first.jsp和second.jsp。都是如下代码:
<%@ page language="java" pageEncoding="gb2312"%>
<html>
<head>
<title>First.jsp page</title>
</head>
<body>
<%
out.println(session.getId()+”<br>”);
out.println(session.isNew());
%>
</body>
</html>
然后我们启动服务器在同一个浏览器页面中先访问first.jsp然后再访问second.jsp,结果如下:
first.jsp
60FF62D46CCB9088DA4BA6125E612ED4
true
second.jsp
60FF62D46CCB9088DA4BA6125E612ED4
false
可以看到Id号码是一样的,当我们第一次访问一个Jsp页面时session对象就会创建,而以后的其他页面都是引用相同的session对象。
打开两个浏览器页面,分别访问first.jsp和second.jsp我们可以看到这时两个页面中的id号是不一样的,而且都是true,我们可以很容易得出结论,在相同的浏览器页面中是共享同一个session对象的。在大多数书籍中都是这样介绍session作用域的。但是情况并非全部如此,多个浏览器页面其实是完全可以共享相同的session对象的。下面我们慢慢解开谜底。
当我们打开浏览器页面第一次访问first.jsp 页面时,容器会生成一个session对象(设置了<%@ page session=false %>指令除外),并将这个session对象的Id号码通过cookie的形式传送到客户端(但是这个cookie不会写入到客户端硬盘上,通常是存在浏览器的缓存当中,当这个页面关闭后它就随之消失,在IE中这个cookie的设置叫做会话cookie,可以尝试一下将这个会话cookie禁用掉,结果会如何),这个cookie的名称一般称为jsessionid,值当然是sesion的id号码。当客户通过此浏览器页面再次访问该web应该程序的其他页面时,就会将这个cookie传送给容器,容器就会通过这个jsessionid号码找到已经生成session对象.如果当发送的请求没有与之相关联的jsessionid时,容器才会生成一个新的session对象。如果客户端禁用掉了会话cookie那么容器就不会根据请求找到任何已经建立的session对象,所以每次都会生成新的session对象,这样会对容器的性能大打折扣,所以在这种情况下可以设置session指令,告诉容器不必为每一个页面都生成一个新的session对象。但是这种方式有一定的局限性,除非每个页面都不使用session对象,但是session的功能早已经深入人心,这种情况我们可以使用重写URL的方式,手工的给其他的页面传递jsessionid号码,这样容器就能够通过传递的id号码找到以前的 session对象,而不会再生成新的session对象了。这种方式完全可以打破同一个浏览器页面共享一个session对象的说法,多个浏览器页面也完全可以。
注意:如果大家想彻底的搞懂session的工作机制,其实先要清楚cookie的工作机制,因为一般情况下容器都会用到cookie来寻找jesessionid的。
分享到:
相关推荐
### Session的工作原理与概念详解 #### 一、Session的基本概念 在计算机科学中,特别是网络编程领域,“**Session**”一词被广泛使用,并且在不同的上下文中具有不同的含义。通常,Session指的是客户端与服务器...
Session工作原理.pdf
Servlet之Session工作原理简介 Session是Java Servlet技术中的一种机制,用于跟踪用户的会话过程。Session的工作原理是基于Cookie的,它通过在浏览器中保存一个唯一的标识符来标识用户的会话过程。下面是Session...
"深入解析Session工作原理及运行流程" Session是Web应用程序中的一种常见技术,用于维持服务器端的数据存储。下面我们将深入解析Session的工作原理及运行流程。 Session的概念和特点 Session是指在计算机中,...
session原理 session原理 session原理 session原理 session原理
#### 一、Session与Cookie的关系及Session的工作原理 在JavaWeb开发中,Session机制被广泛用于实现用户会话状态的跟踪。Session与Cookie有着紧密的联系,但它们各自承担着不同的角色。为了更好地理解这两者之间的...
本文将深入探讨HTTP Session的原理及其在实际应用中的作用。 首先,理解"session"一词的含义至关重要。在一般语境中,session指的是有始有终的一系列动作或消息,例如打电话的过程。而在Web开发中,session则被赋予...
2. **Spring Session 工作原理** Spring Session 使用基于 Redis、 Hazelcast 或者 JDBC 等后端存储来持久化 session 数据。这样,所有服务器都可以访问到同一个 session 存储,实现 session 共享。此外,Spring ...
Session工作原理** Session在ASP.NET中基于HTTP协议的隐藏字段或者Cookie来跟踪用户状态。默认情况下,每个Session都有一个唯一的ID,这个ID被存储在客户端的Cookie中。每次用户请求页面,服务器会根据Session ID...
在Java的持久化框架中,Hibernate是一个非常流行的ORM(对象关系...总的来说,通过这个实践教程,初学者可以深入理解Hibernate的Session工作原理,学习如何自定义Session以适应项目需求,同时掌握基本的数据库操作。
本文将深入探讨PHP中的session工作原理、使用方法以及相关的最佳实践。 ### 1. Session的工作原理 当用户访问一个支持session的PHP页面时,服务器会为该用户生成一个唯一的session ID,通常通过cookie发送回用户的...
本资源主要介绍了session和cookie的作用原理、区别和用法,帮助读者更好地理解两者之间的关系。 Cookie概念 Cookie是浏览器端存储的一种小文本文件,用于记录用户的信息,以便在后续的访问中使用。Cookie可以根据...
Session的工作原理是,当用户访问服务器并进行登录或其他需要记录状态的操作时,服务器会在内存中创建一个唯一的Session ID,并将其发送给浏览器。这个Session ID通常以Cookie的形式存储在客户端。之后,每当客户端...
Session工作原理** 当用户登录网站后,服务器会在内存中创建一个与该用户对应的Session对象,通常会将用户的登录信息(如用户名、权限等)保存在这个对象中。服务器会给这个Session对象分配一个唯一的ID(Session ...
Session的工作原理是:当用户访问网站并登录后,服务器会为该用户创建一个唯一的Session ID,并将其存储在服务器端。这个Session ID随后会被发送到客户端(通常是通过Cookie),客户端在后续的每次请求时都会携带这...
- PHP中的Session工作原理与Cookie类似,但数据存储在服务器端,安全性相对较高。 - **启动Session**:使用`session_start()`开启一个新的会话。 - **设置Session变量**:`$_SESSION`全局数组用于存储会话数据,...
首先,我们需要理解PHP的Session工作原理。当用户访问一个PHP页面并启动Session时,服务器会为该用户生成一个唯一的Session ID,并将其通过Cookie发送回用户的浏览器。此后,每当用户访问其他支持Session的页面时,...
总结来说,理解ASP.NET Session的工作原理和潜在的丢失原因,以及掌握相应的解决策略,是提高Web应用程序稳定性和用户体验的关键。通过选择合适的Session存储模式、优化配置以及正确处理对象序列化,可以有效地避免...
4. **Session工作流程** - 用户访问页面,服务器生成Session ID并发送给客户端(通常通过Cookie)。 - 客户端在后续请求中携带Session ID,服务器根据ID查找并读取对应Session数据。 **对比与选择** - Cookie数据...
在这个过程中,JSP和Servlet协同工作,Session起到了关键的会话管理作用,保证了用户在不同页面间操作的连贯性。在实际项目中,可能还需要结合数据库来持久化购物车数据,以及更多的用户交互设计,但基本思路是一致...