如何安全地存储Websocket的唯一客户端ID?

时间:2020-05-17 22:05:18

标签: javascript node.js websocket

我需要能够知道哪个客户端正在通过Web套接字向服务器发送请求,并将其区别于其他客户端。解决方案是客户端ID,但我不知道存储它的最佳方法,以便客户端可以将其与每个请求一起发送。

客户端

var clientId = null;

if (response.method === "connect"){
    clientId = response.clientId
}

1 个答案:

答案 0 :(得分:1)

您可以使用IIFE包装代码,从而消除了在IIFE之外访问全局范围内变量的可能性。因此,只有在此IIFE内部运行的代码才能访问clientId变量。但是,例如从控制台更改clientId不会改变任何事情。

(function() {

  // Put all of your code in this scope.

  var clientId = null;

  if (response.method === "connect"){
    clientId = response.clientId
  }

})();

如果仅覆盖变量是一个问题,则可以选择使用Web Storage API将ID永久或保存在选项卡关闭之前在浏览器中保存。因此,您可以像下面的示例一样存储它。

if (response.method === "connect"){
  sessionStorage.setItem('clientId', JSON.stringify(response.clientId));
}

然后在脚本的最下方甚至在同一页面的另一脚本中使用以下代码,使用clientId:

var storedClientId = sessionStorage.getItem('clientId');
if (storedClientId !== null) { // Check if the id has been set.
  var clientId = JSON.parse(storedClientId);
}

因此,IIFE将无法在自己的范围之外对变量进行修改。而且,Web Storage API会将您的客户端ID存储在浏览器中,而不是存储在变量中。