`
gcq04552015
  • 浏览: 457301 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Session原理机制

 
阅读更多
这个jsessionid是session的一个标识。

       session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

       当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 session id将被在本次响应中返回给客户端保存。

       保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID,而。比如weblogic对于web应用程序生成的cookie,JSESSIONID= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764,它的名字就是 JSESSIONID。

       由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http://...../xxx;jsessionid= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764

另一种是作为查询字符串附加在URL后面,表现形式为http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764

这两种方式对于用户来说是没有区别的,只是服务器在解析的时候处理的方式不同,采用第一种方式也有利于把session id的信息和正常程序参数区分开来。

为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。

       另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如下面的表单

<form name="testform" action="/xxx"><input type="text"></form>

       在被传递给客户端之前将被改写成

<form name="testform" action="/xxx"><input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"><input type="text"></form>

       这种技术现在已较少应用,笔者接触过的很古老的iPlanet6(SunONE应用服务器的前身)就使用了这种技术。实际上这种技术可以简单的用对action应用URL重写来代替。

       在谈论session机制的时候,常常听到这样一种误解“只要关闭浏览器,session就消失了”。其实可以想象一下会员卡的例子,除非顾客主动对店家提出销卡,否则店家绝对不会轻易删除顾客的资料。对session来说也是一样的,除非程序通知服务器删除一个session,否则服务器会一直保留,程序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭,之所以会有这种错觉,是大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个 session id就消失了,再次连接服务器时也就无法找到原来的session。

       如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求头,把原来的session id发送给服务器,则再次打开浏览器仍然能够找到原来的session。

       恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间
分享到:
评论

相关推荐

    Servlet Session机制详解

    Servlet Session机制详解,如题,详细描述Session的原理,及使用方法,附部分代码

    session机制,缓存,安全

    该资源的主要讲解了session的主要用法,工作原理,安全机制,单点登录,在大型web中的应用。主要为对session不甚了解的同志,价值含量较高,也较为实用。

    详解SpringBoot中Session超时原理说明

    本篇文章主要介绍了详解SpringBoot中Session超时原理说明,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Session丢失的原因及解决办法

    Session原理、Session丢失的原因、Session存储的机制、Session丢失的解决方案

    Jsp内置对象session总结

    Jsp内置对象session总结:详细介绍,Session机制,原理,生命周期h和Session的主要方法等。

    有关session的技术原理及其应用

    有关Session的技术原理及其应用是主要用于给那些对http中session机制比较迷惑的朋友或者想了解session的详细原理的人准备的。此系本人原创内容,推荐指数10

    PHP的cookie与session原理及用法详解

    本文实例讲述了PHP的cookie与session原理及用法。分享给大家供大家参考,具体如下: 产生背景 HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味...

    利用Memcached在php下实现session机制 替换PHP的原生session支持

    方法文件 session实现文件:memcachedsession.php 实现原理(也是PHP内部session的实现原理): 1.先判断客户端有没有sessionid, a.没有就添加一个sessionid给客户端,通常是32位hash码,同时初始化一个数组做session...

    PHP中Session ID的实现原理实例分析

    Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。 PHPSESSIONID的生产算法原理如下: hash_func = md5 / sha1 #可由php.ini...

    PHP session垃圾回收机制实例分析

    主要介绍了PHP session垃圾回收机制,简单分析了session垃圾回收机制的原理、配置及相关使用技巧,需要的朋友可以参考下

    Discuz!X中SESSION机制实例详解

    主要介绍了Discuz!X中SESSION机制,以实例形式较为详细的分析了Discuz!X中SESSION机制的原理与数据库操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    cookie与session多可爱的伙伴

    cookie与session多可爱的伙伴, 认真理解机制原理,希望对你们有帮助。

    微信公众平台开发教程(八)Session处理问题

    在微信窗口,输入的信息有限,我们需要将一些信息分多次请求。 ... ...服务号:招商银行信用卡,就...一、创建通用的Session处理机制。 为了更好的说明原理,便于扩展,我们来自己设计Session。当然,这里也可以使用System.We

    PHP中的session安全吗?

    对于session的原理机制,网上有很多好的文章来介绍,我们可以自行查阅。下面直接分享测试用的例子。 这个测试的例子主要就是一个登录页,登录成功以后可以修改密码,就这样一个简单的功能。 界面如下 首先是在项目...

    ASP.NET应用下基于SessionState的“状态编程框架”解决方案

    但是这种单纯使用SessionState的编程方式具有很多局限,比如SessionItem的Key值冲突,比如没有一个有效的SessionState清除机制会为WebServer带来内存压力。为了实现对客户端状态的有效管理,并提高应用开发效率,在...

    Spring Security OAuth2.0学习笔记.zip

    基于session认证机制的运作流程。 基于token认证机制的运作流程。 理解Spring Security的工作原理,Spring Security结构总览,认证流程和授权,中间涉及到哪些组件,这些组件分 别处理什么,如何自定义这些组件满足...

    Zookeeper篇.pdf

    1.0 zookeeper 是什么? 1.1 zookeeper 提供了什么? 1.2 zookeeper 文件系统 1.3 zookeeper 的四种类型的 znode 1.4 zookeeper 通知机制 1.5 zookeeper 有哪些应用场景?...2.8 zk 的 session 机制

    SpringI18n:这是一个spring mvc的国际化项目, 该项目会尽量阐述i18n的原理与机制

    SpringI18n这是一个spring mvc的国际化项目, 该项目会尽量阐述i18n的原理与机制这是一个简单的Spring管理的I18n Demo Cookie 和Session中的localeResolver只能注册一种,所以需要测试哪种另一种需要在spring配置文件...

Global site tag (gtag.js) - Google Analytics