所以,我正在构建一个应用程序,我希望用户能够向另一个用户发送链接并处理相同的数据。几乎没有必要将数据持续超过15分钟,我希望应用程序不必依赖数据库。
我有一些变量,我目前存放在HttpSession中。
理想情况下,我希望能够在URL中设置参数“sid”,并使用它在第二个客户端的浏览器上设置会话ID - 即接收到SID链接的浏览器。
不幸的是,一旦设置完毕,似乎无法更改当前会话的SID。
到目前为止,我提出的唯一解决方案是使用HttpPost.setHeader("Cookie", "JSESSIONID="+ getSessionId())
方法引用doGet(),并以这种方式获取具有特定会话的数据,但这看起来非常笨重。
有什么建议吗?
这似乎变成了关于将两个用户设置为具有相同会话的智慧的讨论,因此会话变量可以保持相同。请注意,我正在寻找的是非db,即轻量级解决方案。 PHP允许您任意设置会话ID来执行此操作,但我在此实例中部署到Tomcat。允许轻量共享一些参数的东西,就是它......
我所做的就是使用context.setAttribute()
设置上下文变量。像罪一样丑陋,但除非有人有任何更好的想法,否则我只能想出来。
答案 0 :(得分:2)
这种方法存在一些安全问题,因为您正在使用1模拟[会话劫持]:
在计算机科学中,会话劫持,有时也称为cookie 劫持是有时利用有效的计算机会话 也称为会话密钥 - 用于未经授权的信息访问 或计算机系统中的服务。特别是,它用于指代 窃取用于向远程用户验证用户的魔术cookie 服务器。它与Web开发人员特别相关,如HTTP 用于在许多网站上维护会话的cookie可以很容易 被攻击者使用中间计算机或访问来窃取 受害者计算机上保存的cookie(请参阅HTTP cookie被盗)。
更好的方法是以两种用户都可以从会话中接近数据的方式设置数据。如果您使用的是单服务器,则可以使用服务器中的某些全局数据执行此操作。在集群环境或云环境中,您需要一些通用存储(即数据库,全局缓存等)。
您正在通过不同会话在两个用户之间共享数据。
每个Java虚拟机每个“Web应用程序”有一个上下文 其中一个属性允许servlet容器给servlet 其他信息。
属性用于在同一Web应用程序的servlet之间共享容器内的数据。
对于群集:
如果Web应用程序在其中标记为“分布式” 部署描述符,每个都有一个上下文实例 虚拟机。在这种情况下,上下文不能用作 共享全球信息的位置(因为信息不会 真正的全球化)。改为使用像数据库这样的外部资源。