Websocket:在页面重新加载后维护用户会话

时间:2014-02-10 10:55:27

标签: java javascript java-ee websocket single-page-application

我有一个简单的单页应用程序,使用jetty websockets进行服务器和客户端之间的通信。

问题: 每次重新加载页面时,我的websocket连接都会被禁用,而new会被初始化。问题是用户应该重新刷新每个页面刷新。

问题: 如何在页面刷新时消除重新登录的需要?

已编辑 面对下一个问题:如何决定何时删除会话?我在服务器端有一个对等对象,除了websocket会话容器之外别无其他。 Peer在onClose方法上被删除,而{1}}方法又在删除客户端websocket上调用。问题出现了:当用户按下F5 - >客户端websocket被破坏 - >服务器删除适当的websocket - >客户端尝试重新加载页面并检查是否有任何会话并且找不到任何内容。另一方面,我根本不能停止删除同伴(会话)。

问题:如何判断服务器何时删除我的同伴?

1 个答案:

答案 0 :(得分:7)

为了消除在每个新连接建立时验证WebSocket连接的需要,您可以使用cookie。

首次验证WebSocket连接,在WebSocket连接上设置cookie ,并在新连接时重新检查cookie。

这需要一个允许在WebSocket连接上读取和设置cookie的WebSocket服务器。

如果WebSocket连接的源自与包含打开WebSocket连接的JavaScript的HTML页面相同的源,则您还可以使用“普通”基于HTML表单的登录加cookie过程:

  1. 用户打开“login.html”,其中包含用于登录的HTML表单
  2. 用户输入用户名/密码,通过HTTP / POST将HTML表单提交到某个URL
  3. 服务器检查凭据,成功时生成随机cookie,存储cookie,并在HTTP / POST返回的HTML页面上设置cookie
  4. 后一个返回的页面然后打开一个WebSocket连接到服务器(它在同一个源上,因此设置了以前设置的cookie)
  5. 打开握手中的WebSocket服务器检查是否存在cookie,以及cookie是否存储在登录用户的数据库中
  6. 如果是,则WebSocket连接成功。如果不是,则WebSocket服务器不会建立连接,而是将用户重定向到1.