session 一般是保存在什么地方?

2016-11-25 22:09:20 +08:00
 oncew
不考虑那种将 session 保存到 redis 、 memache 这种持久化的方案。

一般的 web 框架是通过什么方式来保存 session 的? session ,我理解的与应用程序启动,存放在开辟的一块内存空间,但是为什么应用服务重启之后, session 信息会还在?

最近遇到的一个问题, web 进程结束了,过了一段时间重启,客户端不需要重新登陆,仍然可以使用上次的 cookie 来登陆。检查结果发现是上次 session 还在,没有随着服务关掉而清除,但是 session 一般不是保存在内存里面的?随进程结束,也应该会被回收?

申明,用的是 web 框架自带的 session 处理机制,没有用第三方服务( redis 、....)将 session 保存,也是用的单机测试的,没有集群。。。
9444 次点击
所在节点    程序员
14 条回复
letitbesqzr
2016-11-25 22:15:03 +08:00
不同框架 不同容器 都可能存在不同的地方
shinwood
2016-11-25 22:16:40 +08:00
PHP 的 session 一般是保存为文件的…
Zzzzzzzzz
2016-11-25 22:29:28 +08:00
不用多想, 找个带多后端封装的 session 实现就明白了, 一般就是硬盘文件、 memcached 、 redis 、数据库、 主容器的内存、客户端加密的 cookie
Ouyangan
2016-11-25 22:30:25 +08:00
拿 java tomcat 举例 ,运行时 session 是在内存中的,说白了就是一个 concurrentHashmap ,正常关闭和重启会有序列化写入文件的机制, 但是直接杀掉是不会序列化 session 到文件的.
murmur
2016-11-25 22:34:56 +08:00
小的用默认实现 大的要上到 redis 或者 memcache 里
cxbig
2016-11-25 23:58:35 +08:00
框架一般都是写文件或数据库的,要特别配置才会和 redis 、 memcached 等缓存机制挂钩
你这个情况先检查缓存文件文件夹,再检查数据库表,应该能找到 session 的存放点
pathbox
2016-11-26 01:14:49 +08:00
很多地方都可以保存 文件 cookie redis 内存等
oncew
2016-11-26 08:17:20 +08:00
@cxbig 我以为 session 是随着 web 框架一起运行在内存中,关闭服务就会将 session 清空,没料到 web 框架会有自动将 session 序列化到本地文件的机制 --
oncew
2016-11-26 08:29:50 +08:00
@shinwood php 默认保存到文件,一般是会缓存到本地文件, web 框架一般会将它存到本地硬盘什么地方?
jessynt
2016-11-26 09:59:45 +08:00
@oncew

框架一般都会有配置的吧,如果没有提供,应该保存在 php.in 里面配置的路径

q397064399
2016-11-26 10:03:43 +08:00
楼主是用的 JavaEE 吧
Servlet 规范里面 有这个接口,
HttpSessionActivationListener 配置到 web.xml 里面你就可以看到 Session 的持久化跟激活了
q397064399
2016-11-26 10:10:47 +08:00
Tomcat 也提供自定义的 SessionManager 管理器
jimzhong
2016-11-26 15:53:03 +08:00
Session 可以存在服务端或者客户端。
如果存客户端就是用 cookie ,要加密并签名,只建议在非关键场合使用。此时要配置一个 SESSION_KEY ,只要 key 不变,用户 cookie 没过期,即使服务器重启 session 也不丢。
如果存服务端可以放在文件里,放关系数据库里,放 redis 里。然后给用户分配一个随机的 sessionid ,用这个 id 取 session 。我比较喜欢放 redis 里,性能会好一些吧。
oncew
2016-11-26 20:27:06 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/323359

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX