`
Getwaysun
  • 浏览: 32206 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

深入理解HTTP Session

    博客分类:
  • JSP
 
阅读更多
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,请求头信息:
http://img1.51cto.com/attachment/201002/201002091265648806734.png
http://img1.51cto.com/attachment/201002/201002091265648827125.png

通过图可以清晰发现,第二次请求的时候,已经添加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。
http://img1.51cto.com/attachment/201002/201002081265643942359.png

其实,这个也不一定的,总结下:对于多标签的浏览器(比如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深入剖析图示"的学习,可以直观地了解两者的工作流程,加深理解。

    .net core 6 使用session进行验证

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

    session实验

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

    Spring Session + redis实现session共享

    本文将深入探讨如何利用Spring Session与Redis来实现这一功能。 首先,Spring Session是一个开源项目,由Pivotal Software开发,它扩展了Spring MVC,提供了对HTTP会话(session)的管理支持。Spring Session的核心...

    jsp-session测试

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

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

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

    session监听小例子

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

    Session丢失原因和解决方案

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

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

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

    有关session

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

    servlet中关于session的理解

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

    session简介.doc

    本文将深入探讨session的工作原理,以及在Java Web应用程序中如何有效地利用session。 **一、术语session** 在不同的上下文中,session这个词有多种含义。基本含义是指一系列相关的行为或消息,比如电话通话的整个...

    phpcms web发布session过期问题解决

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

    JAVA SESSION监听器

    Java Session监听器是Java Servlet规范中提供的一种机制,用于对HttpSession对象的生命周期事件进行监听和处理。...通过深入理解和熟练运用Session监听器,开发者可以提高应用程序的效率和安全性。

    session生命周期的设置

    本篇将深入探讨Session的工作原理、生命周期以及如何进行有效设置。 一、Session的工作原理 Session的工作基于Cookie技术。当用户访问网站并提交登录信息后,服务器验证成功,就会在服务器端创建一个Session对象,...

    Hibernate Session释放模式

    虽然灵活性高,但容易出错,需要开发者对Hibernate有深入理解,并且管理不当可能导致资源泄露。 5. **SessionFactory级别的缓存管理** SessionFactory是线程安全的,可以全局共享。通过合理配置,SessionFactory...

    redissession共享代码

    首先,我们需要了解Session的基本概念。在HTTP协议中,由于其无状态特性,无法在多个请求之间保持用户的状态。因此,Web服务器引入了Session机制,每当用户打开一个页面,服务器就会创建一个Session对象,并将用户的...

    Session详解(主要讲Session跟Cookic区别)

    ### Session与Cookie的区别详解 #### 一、Session与Cookie的基本概念 **Session**与**Cookie**都是Web...通过以上分析,我们可以更好地理解Session与Cookie的区别及其在实际开发中的应用,从而做出更合理的设计决策。

Global site tag (gtag.js) - Google Analytics