如何理解SessionId?

转载 2018年04月17日 19:09:13

如何理解SessionId?

原创 2017年06月14日 18:48:06

有登录过网站经验的人儿都会遇过这样的一种情景:在登录过一个网站,只要保持浏览器处于打开状态,即使把有关该网站的页面都关掉,再访问该网站依旧会处于登录状态。反之,把浏览器关掉,下次再访问该网站就处于离线状态。举个例子,我访问了酷狗和CSDN的网站,一边听歌一边写写东西,出于某种原因我把CSDN的网页关了,此时我再访问CSDN时可以发现依旧处于登录状态。但如果我关掉的是浏览器,则需要登录后才能继续写东西,当然,这里不考虑某些网站开发出了自动登录等功能。

网页是基于Http协议进行解析的,而Http是无状态协议。所谓的无状态便是下一次访问并不知道上一次访问的情况,每访问完一次后便断开连接。那么,服务器是怎么识别访问的用户身份的呢?这里便运用到了Session和Cookie。了解过Session和Cookie的人都会知道,Session是保存在服务器端的,而Cookie是保存在客户端的。那么,在服务器Session是怎么识别用户?

对此,我新建了一个工程,设置了拦截器识别用户是否已经处于登录状态,登录了便可访问测试页面,未登录便跳到登录页面。



在每次程序初始化的时候,通过客户端查看Cookie的值可以看到存在一个SessionId。即程序初始化时,服务器通过Response把SessionId返回给客户端,而客户端则把它用Cookie存放起来。接下来每次访问该网站的时候都会带着这个SessionId访问,后台根据SessionId便可以知道用户的状态,而一旦浏览器被关闭,改Cookie也会被默认清除掉。问题似乎到这里便解决了,但重启了服务器几次之后,发现每次初始化时Response返回SessionId是一样的,也就并不存在唯一性,不存在唯一性也就说明它不能作为识别作用。


于是继续往下看,发现在tomcat中,Session是以HashMap的格式存放在org.apache.cataline.session.ManagerBase这个类中的,即以key-value的格式存放,key为sessionId,value则为org.apache.cataline.session这个接口。到这里,我们可以发现,程序初始化返回给客户端的SessionId其实是一个键,通过这个键,可以找到org.apache.cataline.session这个接口,而这个接口由org.apache.cataline.session.StandardSession类实现,同时这个类也实现了HttpSession,而HttpSession在tomcat中的数据,便是用session.setAttribute(key,value)设置的数据。

到这里,基本上也就能解释模拟情景出现的情况。浏览器关闭后,清除掉的是SessionId而不是Session,此时,Session还是依旧存在服务器中。在新的访问过程中带给后台不再是之前的SessionId,找不到之前对应的值也就不能够识别用户的身份。而浏览器不关闭,保存SessionId值的cookie没有被删除,排除人工修改的可能,新的访问带给后台的还是原来的SessionId,服务器通过SessionId找到Session的值,因此也就保持原来的状态。

深入理解远程调用之Hessian

本技术分享视频主要从3个方面来介绍hessian。(1)hessian入门应用实现(2)源码角度分析hessian基本的原理(3)深入源码解析hessian的序列化和反序列化机制
  • 2017年06月24日 20:03

sessionID的理解

SessionID的本质 一、客户端用cookie保存了sessionID客户端用cookie保存了sessionID,当我们请求服务器的时候,会把这个sessionID一起发给服务器,服务器会到内...
  • sd9110110
  • sd9110110
  • 2016-08-04 12:04:23
  • 203

sessionId的作用

sessionid是一个会话的key,浏览器第一次访问服务器会在服务器端生成一个session,有一个sessionid和它对应。tomcat生成的sessionid叫做jsessionid。sess...
  • u011402896
  • u011402896
  • 2018-01-15 10:57:16
  • 192

获取SessionID

  • 2010年04月17日 12:10
  • 345B
  • 下载

SessionID的理解

sessionid是一个会话的key,浏览器第一次访问服务器会在服务器端生成一个session,有一个sessionid和它对应。tomcat生成的sessionid叫做jsessionid。 ...
  • Mouzu
  • Mouzu
  • 2017-08-21 15:36:07
  • 172

在SOAP Header中携带认证ID的WebService实例

通过在SOAP Header中携带认证ID,可避免调用WebService时对HTTP Cookie的依赖,实现自定义的认证和Session管理。具体实现方法如下:自定义SOAP Header pub...
  • kingmax54212008
  • kingmax54212008
  • 2010-08-28 22:22:00
  • 1273

怎样获取网页的SessionId

代码: Accept-Language: zh-cn Content-Type: application/x-www-form-urlencoded Proxy-Connection: Keep-A...
  • u012187684
  • u012187684
  • 2014-03-08 21:06:00
  • 3094

Android HTTP保存sessionid

sessionid包含在cookies里面,而cookies在header里,所以我们需要先从header里拿到cookies,然后再拿到sessionid。 下面给出保存cookies的方...
  • gxp1182893781
  • gxp1182893781
  • 2017-09-19 11:48:29
  • 620

PHP的SESSIONID生成原理

作为一个web程序猿,我们对session肯定都不陌生,session id是我们各自在服务器上的一个唯一标志,这个id串既可以由php自动来生成,也可以由我们来赋予。你们可能和我一样,很关心php自...
  • rainday0310
  • rainday0310
  • 2013-05-31 16:50:45
  • 9199

根据sessionid找回session

我们知道,客户端连接服务器的时候,服务器会创建一个session,用于客户端连接。如果客户端遇到浏览器关闭等情况,再打开浏览器会新建一个session,如果我们在服务器session失效之前把它找回,...
  • lcwlyl
  • lcwlyl
  • 2007-09-10 08:59:00
  • 3132
收藏助手
不良信息举报
您举报文章:如何理解SessionId?
举报原因:
原因补充:

(最多只允许输入30个字)