1
letitbesqzr 2016-11-25 22:15:03 +08:00
不同框架 不同容器 都可能存在不同的地方
|
2
shinwood 2016-11-25 22:16:40 +08:00
PHP 的 session 一般是保存为文件的…
|
3
Zzzzzzzzz 2016-11-25 22:29:28 +08:00
不用多想, 找个带多后端封装的 session 实现就明白了, 一般就是硬盘文件、 memcached 、 redis 、数据库、 主容器的内存、客户端加密的 cookie
|
4
Ouyangan 2016-11-25 22:30:25 +08:00
拿 java tomcat 举例 ,运行时 session 是在内存中的,说白了就是一个 concurrentHashmap ,正常关闭和重启会有序列化写入文件的机制, 但是直接杀掉是不会序列化 session 到文件的.
|
5
murmur 2016-11-25 22:34:56 +08:00
小的用默认实现 大的要上到 redis 或者 memcache 里
|
6
cxbig 2016-11-25 23:58:35 +08:00
框架一般都是写文件或数据库的,要特别配置才会和 redis 、 memcached 等缓存机制挂钩
你这个情况先检查缓存文件文件夹,再检查数据库表,应该能找到 session 的存放点 |
7
pathbox 2016-11-26 01:14:49 +08:00
很多地方都可以保存 文件 cookie redis 内存等
|
8
oncew OP @cxbig 我以为 session 是随着 web 框架一起运行在内存中,关闭服务就会将 session 清空,没料到 web 框架会有自动将 session 序列化到本地文件的机制 --
|
11
q397064399 2016-11-26 10:03:43 +08:00
楼主是用的 JavaEE 吧
Servlet 规范里面 有这个接口, HttpSessionActivationListener 配置到 web.xml 里面你就可以看到 Session 的持久化跟激活了 |
12
q397064399 2016-11-26 10:10:47 +08:00
Tomcat 也提供自定义的 SessionManager 管理器
|
13
jimzhong 2016-11-26 15:53:03 +08:00
Session 可以存在服务端或者客户端。
如果存客户端就是用 cookie ,要加密并签名,只建议在非关键场合使用。此时要配置一个 SESSION_KEY ,只要 key 不变,用户 cookie 没过期,即使服务器重启 session 也不丢。 如果存服务端可以放在文件里,放关系数据库里,放 redis 里。然后给用户分配一个随机的 sessionid ,用这个 id 取 session 。我比较喜欢放 redis 里,性能会好一些吧。 |
14
oncew OP 多谢各位 ~~ ,找到了一遍还不错的文章 https://astaxie.gitbooks.io/build-web-application-with-golang/content/zh/06.1.html
|