sessionid如何产⽣?由谁产⽣?保存在哪⾥?
⾯试问道这个我居然不知道怎么回答,当然也是因为我确实没有研究过。下⾯就是百度了⼀篇⽂章后简单回答这个问题。
sessionid是⼀个会话的key,浏览器第⼀次访问服务器会在服务器端⽣成⼀个session,有⼀个sessionid和它对应。tomcat⽣成的sessionid叫做jsessionid。
session在访问tomcat服务器HttpServletRequest的getSession(true)的时候创建,tomcat的ManagerBase类提供创建sessionid的⽅法:随机数+时间+jvmid;
存储在服务器的内存中,tomcat的StandardManager类将session存储在内存中,也可以持久化到file,数据库,memcache,redis等。客户端只保存sessionid到cookie中,⽽不会保存session,session销毁只能通过invalidate或超时,关掉浏览器并不会关闭session。
那么Session在何时创建呢?当然还是在服务器端程序运⾏的过程中创建的,不同语⾔实现的应⽤程序有不同创建Session的⽅法,⽽在Java中是通过调⽤HttpServletRequest的getSession⽅法(使⽤true作为参数)创建的。在创建了Session的同时,服务器会为该Session⽣成唯⼀的Session id,⽽这个Session id在随后的请求中会被⽤来重新获得已经创建的Session;在Session被创建之后,就可以调⽤Session相关的
⽅法往Session中增加内容了,⽽这些内容只会保存在服务器中,发到客户端的只有Session id;当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id到相应的Session,从⽽再次使⽤之。
创建:sessionid第⼀次产⽣是在直到某server端程序调⽤ Session(true)这样的语句时才被创建。
删除:超时;程序调⽤HttpSession.invalidate();程序关闭;
session存放在哪⾥:服务器端的内存中。不过session可以通过特殊的⽅式做持久化管理(memcache,redis)。
session的id是从哪⾥来的,sessionID是如何使⽤的:当客户端第⼀次请求session对象时候,服务器会为客户端创建⼀个session,并将通过特殊算法算出⼀个session的ID,⽤来标识该session对象
session会因为浏览器的关闭⽽删除吗?
不会,session只会通过上⾯提到的⽅式去关闭。
下⾯是tomcat中session的创建:
ManagerBase是所有session管理⼯具类的基类,它是⼀个抽象类,所有具体实现session管理功能的类都要继承这个类,该类有⼀个受保护的⽅法,该⽅法就是创建sessionId值的⽅法:
(tomcat的session的id值⽣成的机制是⼀个随机数加时间加上jvm的id值,jvm的id值会根据服务器的硬件信息计算得来,因此不同jvm的id值都是唯⼀的),
StandardManager类是tomcat容器⾥默认的session管理实现类,
session怎么记忆它会将session的信息存储到web容器所在服务器的内存⾥。
PersistentManagerBase也是继承ManagerBase类,它是所有持久化存储session信息的基类,PersistentManager继承了PersistentManagerBase,但是这个类只是多了⼀个静态变量和⼀个getName⽅法,⽬前看来意义不⼤,对于持久化存储session,tomcat还提供了StoreBase的抽象类,它是所有持久化存储session的基类,另外tomcat还给出了⽂件存储FileStore和数据存储JDBCStore两个实现。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论