`
hz_chenwenbiao
  • 浏览: 1010576 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

深入理解HTTP Session(转)

阅读更多

载自:http://lavasoft.blog.51cto.com/62575/275589

 

session在web开发中是一个非常重要的概念,这个概念很抽象,很难定义,也是最让人迷惑的一个名词,也是最多被滥用的名字之一,在不同的场合,session一次的含义也很不相同。这里只探讨HTTP Session。
 
为了说明问题,这里基于Java Servlet理解Session的概念与原理,这里所说Servlet已经涵盖了JSP技术,因为JSP最终也会被编译为Servlet,两者有着相同的本质。
 
在Java中,HTTP的Session对象用javax.servlet.http.HttpSession来表示。
 
1、概念:Session代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的。在Servlet中,session指的是HttpSession类的对象,这个概念到此结束了,也许会很模糊,但只有看完本文,才能真正有个深刻理解。
 
2、Session创建的时间是:
一个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程序调用 HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用 <% @page session="false"%> 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句 HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的 session对象的来历。
由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭它。
 
引申:
1)、访问*.html的静态资源因为不会被编译为Servlet,也就不涉及session的问题。
2)、当JSP页面没有显式禁止session的时候,在打开浏览器第一次请求该jsp的时候,服务器会自动为其创建一个session,并赋予其一个sessionID,发送给客户端的浏览器。以后客户端接着请求本应用中其他资源的时候,会自动在请求头上添加:
Cookie:JSESSIONID=客户端第一次拿到的session ID
这样,服务器端在接到请求时候,就会收到session ID,并根据ID在内存中找到之前创建的session对象,提供给请求使用。这也是session使用的基本原理----搞不懂这个,就永远不明白session的原理。
下面是两次请求同一个jsp,请求头信息:
通过图可以清晰发现,第二次请求的时候,已经添加session ID的信息。
 
3、Session删除的时间是:
1)Session超时:超时指的是连续一定时间服务器没有收到该Session所对应客户端的请求,并且这个时间超过了服务器设置的Session超时的最大时间。
2)程序调用HttpSession.invalidate()
3)服务器关闭或服务停止
 
4、session存放在哪里:服务器端的内存中。不过session可以通过特殊的方式做持久化管理。
 
5、session的id是从哪里来的,sessionID是如何使用的:当客户端第一次请求session对象时候,服务器会为客户端创建一个session,并将通过特殊算法算出一个session的ID,用来标识该session对象,当浏览器下次(session继续有效时)请求别的资源的时候,浏览器会偷偷地将sessionID放置到请求头中,服务器接收到请求后就得到该请求的sessionID,服务器找到该id的session返还给请求者(Servlet)使用。一个会话只能有一个session对象,对session来说是只认id不认人。
 
6、session会因为浏览器的关闭而删除吗?
不会,session只会通过上面提到的方式去关闭。
 
7、同一客户端机器多次请求同一个资源,session一样吗?
一般来说,每次请求都会新创建一个session。
 
其实,这个也不一定的,总结下:对于多标签的浏览器(比如360浏览器)来说,在一个浏览器窗口中,多个标签同时访问一个页面,session是一个。对于多个浏览器窗口之间,同时或者相隔很短时间访问一个页面,session是多个的,和浏览器的进程有关。对于一个同一个浏览器窗口,直接录入url访问同一应用的不同资源,session是一样的。
 
8、session是一个容器,可以存放会话过程中的任何对象。
 
9、session因为请求(request对象)而产生,同一个会话中多个request共享了一session对象,可以直接从请求中获取到session对象。
 
10、其实,session的创建和使用总在服务端,而浏览器从来都没得到过session对象。但浏览器可以请求Servlet(jsp也是Servlet)来获取session的信息。客户端浏览器真正紧紧拿到的是session ID,而这个对于浏览器操作的人来说,是不可见的,并且用户也无需关心自己处于哪个会话过程中。

分享到:
评论

相关推荐

    理解HTTP session原理及应用

    本文将深入探讨HTTP Session的原理及其在实际应用中的作用。 首先,理解"session"一词的含义至关重要。在一般语境中,session指的是有始有终的一系列动作或消息,例如打电话的过程。而在Web开发中,session则被赋予...

    深入理解session,cookie

    接下来,我们将深入探讨这两种技术的工作原理及其在Servlet和JSP中的应用。 首先,我们来看Cookie。Cookie是由服务器端创建并在HTTP响应头中发送到客户端(通常是浏览器)的一小段数据。它以键值对的形式存储信息,...

    Cookie与Session深入剖析图示

    在Web开发中,Cookie和Session是两种...在进行Web开发时,对这两种技术的深入理解和运用,能够提升用户体验,增强系统的安全性。通过"Cookie与Session深入剖析图示"的学习,可以直观地了解两者的工作流程,加深理解。

    深入理解ServletJSP之“Cookie和Session原理”很详细

    ### 深入理解Servlet/JSP之“Cookie和Session原理” #### 一、Cookie Cookie是一种常用的技术,用于实现Web应用程序中的用户会话管理。它允许服务器存储一些数据(通常是小文本文件)在用户的计算机上,以便后续...

    (转)讲解各种session

    首先,我们需要理解Session的基本概念。当用户打开一个网站并登录时,服务器会为该用户创建一个唯一的Session ID,这个ID通常通过Cookie返回给客户端浏览器。在后续的请求中,浏览器会携带这个Session ID,服务器...

    servlet中关于session的理解

    本文将基于提供的文件内容,深入探讨Servlet中Session的工作原理、如何实现Session的跟踪机制以及Session在实际应用中的作用。 #### Session概述 在Web应用程序中,HTTP协议本身是一种无状态的协议,这意味着...

    对session和cookie的一些理解

    标题中的“对session和cookie的一些理解”提示我们,这篇内容将涉及Web开发中两种重要的用户会话管理技术:Session和Cookie。在Web应用中,Session和Cookie被广泛用于跟踪用户的登录状态、购物车信息等,确保用户在...

    深入探討Session(IntraWeb)

    深入探讨Session机制:IntraWeb框架下的Session管理与应用 标题和描述中提及的知识点主要集中在IntraWeb框架中Session的实现与管理机制。Session在Web应用开发中扮演着至关重要的角色,它允许服务器为每个用户保持...

    session实验

    在IT行业中,Session是一个至关重要的概念,特别是在Web开发领域。Session是服务器端用来跟踪用户状态的一种机制。...通过这个实验,学习者能够深入理解Session的工作原理及其在实际应用中的重要性。

    Hibernate-nosession

    本文将深入探讨Hibernate-nosession的概念、应用场景以及如何在实际代码中实现。 首先,理解什么是Hibernate Session。Session是Hibernate中的核心接口,它充当了应用程序和数据库之间的桥梁,负责对象的持久化操作...

    jsp-session测试

    【JSP Session 测试】是Java初学者在学习如何在JSP页面中使用Session对象时的一个常见实践案例。在这个练习中,我们将深入了解JSP ...通过这个练习,你可以深入理解Session的工作方式,并学会在实际项目中灵活运用。

    .net core 6 使用session进行验证

    通过查看这个项目,你可以更深入地理解Session验证的实际应用和代码实现。 总之,.NET Core 6提供了一种简单而强大的方式来利用Session进行用户验证。正确配置和使用Session可以确保Web应用程序的安全性,并提供...

    Session丢失原因和解决方案

    在深入探讨解决方案之前,让我们先理解Session的基本原理。 Session是一种服务器端的状态管理机制,用于在用户的不同请求之间保持数据。在ASP.NET中,Session默认是保存在进程内(InProc模式),即存储在ASP.NET ...

    phpcms web发布session过期问题解决

    为了解决这个问题,我们需要深入理解PHP session的工作原理和phpcms的内部机制。 首先,PHP session是通过在服务器端存储用户状态信息的一种方法。当用户访问网站并登录时,服务器会生成一个唯一的session ID,并将...

    session之用户交互间隔&&session持久化

    根据给定文件的信息,本文将围绕“Session 用户交互间隔与 Session 持久化”这一主题进行深入探讨,包括 Session 的基本概念、Tomcat 中 Session 的管理方式、Session 的持久化机制以及用户交互间隔等内容。...

    session简介.doc

    理解session的工作原理,合理配置和管理session,是构建高效、安全的Web应用的关键。 参考文档: 1. 《Web应用开发中的session管理》 2. 《Java Web编程中的session深入解析》 3. 《HTTP协议详解》 4. 《Cookie与...

    实验教学资料:深入理解HTTP协议的应用及其各部分组成

    使用场景及目标:通过实际的操作,帮助学习者更加直观地理解HTTP协议的工作机制,加深理论知识的理解,能够更好地应用于网络应用程序的设计与优化。 其他说明:为了达到最好的学习效果,推荐结合Wireshark软件来捕捉...

    有关session

    【标题】:“深入理解Session机制” 在Web开发中,Session是一种服务器端用于跟踪用户状态的重要技术。当用户访问Web应用时,服务器通过Session来识别不同的请求是否来自同一个用户,从而实现用户个性化体验或数据...

    birt 使用session数据, 通过servlet访问

    为了实现这样的功能,你需要对Servlet API、HTTP Session机制以及BIRT的编程接口有深入的理解。在"birt获取session数据——爱不留"这个文件中,可能包含了具体的示例代码或者教程,帮助开发者了解如何在实际项目中...

    session监听小例子

    在Java Web开发中,Session是服务器用来跟踪用户状态的重要机制。...通过学习这个小例子,你可以更深入地理解如何在Java Web应用中使用Session监听器,并将其应用于自己的项目中,提升应用程序的管理和安全性。

Global site tag (gtag.js) - Google Analytics