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

VB_*_*VB_ 2 javascript java java-ee websocket single-page-application

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

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

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

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

问题:如何告诉服务器何时删除我的同行?

obe*_*tet 7

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

验证在第一次的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是否存储在DB中以供登录用户使用
  6. 如果是这样,WebSocket连接成功.如果不是,则WebSocket服务器不会建立连接,而是将用户重定向到1.