你可以设置session的持久化特性试试看,当服务器进程重新启动或这些信息将能够被再次使用。
建议你最好还是把数据存放进数据库来实现计数器。你这个“项目里面已经有客户上传的资源“这句话有点疑问,基本上资源都是放在磁盘上或数据库里面,重新部署一个新的版本应该保证数据能转换过来而不是删除它们让用户重新录入,那么我在想你这话话指的是当前用户在使用时 session 会话中有些数据还在内存里面,重启会丢失,如果是这样的话,基本上只有便宜的服务器会碰到这个问题,因为商用的服务器有一个功能叫”持久性会话“,在服务器重启时会把所有session的数据写入到数据库(有些服务器会用一个嵌入式的数据库比如derby或hsql来保存这个东西)或磁盘,重启成功后会把它们恢复到内存里。对于很多不适合重启的应用程序它们会想到使用 JSP 而不是使用 Servlet。不过还是有很多网站本身是会停机的,只要事先发布公告并挑个使用者数量最少的深夜来做就行了。
从技术上讲,session 对于用户来说,他仅仅有一个 session ID 而已,其它所有东西都在服务器上,重启后用户刷新浏览器,那个 session id 对应的数据依然能拿到手。那么只要服务器上的东西放在session中的都写入到数据库(因为这样可以加密,防止他人偷看或复制),重启后恢复到内存中,所有东西都正常了。我们不应该假设所有在内存里面的东西都能恢复。
因此我们想到了很多 API 对于想放入 session 的东西都要求实现 javaioSerializable 接口的原因也就在这里,另外对于需要支持集群功能的服务器也是这样的,因为 session 数据需要在多台服务器之间复制。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)