博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sessionid如何产生?由谁产生?保存在哪里?
阅读量:6827 次
发布时间:2019-06-26

本文共 1664 字,大约阅读时间需要 5 分钟。

参考:

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端程序调用 HttpServletRequest.getSession(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的信息存储到web容器所在服务器的内存里
PersistentManagerBase也是继承ManagerBase类,它是所有持久化存储session信息的基类,PersistentManager继承了PersistentManagerBase,但是这个类只是多了一个静态变量和一个getName方法,目前看来意义不大,
对于持久化存储session,tomcat还提供了StoreBase的抽象类,它是所有持久化存储session的基类,另外tomcat还给出了文件存储FileStore和数据存储JDBCStore两个实现。

转载于:https://www.cnblogs.com/lihuanliu/p/6758478.html

你可能感兴趣的文章
.NET简谈互操作(一:开篇介绍)
查看>>
用SHELL脚本自动化安装Nagios服务器端和客户端的
查看>>
【转】Chrome插件开发之一: 搭建基本结构
查看>>
[RHEL5企业级Linux服务攻略]--第11季 NIS服务全攻略
查看>>
C#小技巧系列之一:获取系统有关信息
查看>>
[CTO札记]好部下的3个层次
查看>>
Windows下安装Resin及配置详解与发布应用
查看>>
Mongodb数据库安装及使用
查看>>
08-Windows Server 2012 R2 会话远程桌面-标准部署-使用PowerShell进行部署2-1
查看>>
centos7 systemctl 启动 Redis 失败
查看>>
The Hacker's Guide To Python 单元测试
查看>>
编程王道,唯“慢”不破
查看>>
SQL 必知必会·笔记<13>插入数据
查看>>
Openfire与XMPP协议
查看>>
在.NET下如何实现密码Hash化
查看>>
缩略图不变形
查看>>
【计算机视觉必读干货】图像分类、定位、检测,语义分割和实例分割方法梳理...
查看>>
SSIS Execute SQL Task 用法
查看>>
使用枚举和结构输出日期
查看>>
面试题:单词翻转(代码简洁&效率)
查看>>