Javascript 如何安全地为WebSocket存储唯一的客户端id?

Javascript 如何安全地为WebSocket存储唯一的客户端id?,javascript,node.js,websocket,Javascript,Node.js,Websocket,我需要能够知道哪个客户端通过web套接字向服务器发送请求,并将其与其他客户端区分开来。解决方案是一个客户端id,但我不知道存储它的最佳方式,这样客户端就可以将它与每个请求一起发送 客户 var clientId = null; if (response.method === "connect"){ clientId = response.clientId } 您可以使用一个可以消除访问IIFE外部全局范围内变量的可能性的。因此,只有在这个IIFE中运行的代码才能访问clientId

我需要能够知道哪个客户端通过web套接字向服务器发送请求,并将其与其他客户端区分开来。解决方案是一个客户端id,但我不知道存储它的最佳方式,这样客户端就可以将它与每个请求一起发送

客户

var clientId = null;

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


您可以使用一个可以消除访问IIFE外部全局范围内变量的可能性的。因此,只有在这个IIFE中运行的代码才能访问
clientId
变量。但是,从控制台更改
clientId
不会改变任何东西

(function() {

  // Put all of your code in this scope.

  var clientId = null;

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

})();
如果仅覆盖变量是一个问题,那么您也可以使用在浏览器中永久保存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存储API会将您的客户端id存储在浏览器中,而不是存储在变量中。

您可以在服务器上生成一个随机id,并在建立连接时将其发送给客户端。然后服务器知道id,客户端可以在每次数据传输时发送。@EmielZuurbier这就是我目前正在做的事情。我的问题是存储id,这样用户就不能编辑它。他们当前可以用什么方式编辑它?请包括您想要解决方案的代码。这样我们就可以看到您的当前状态以及可以改进哪些内容来帮助您的案例。@EmielZuurbier更新了代码,我目前正在使用一个变量。我已经尝试了这两种方法,但是第一种方法我需要能够访问范围之外的内容,而对于发送,我仍然可以从开发人员控制台更改存储。IIFE应该围绕脚本中的整个代码进行包装<代码>(函数(){//所有脚本})()。对于存储,是的,它仍然是可变的,因为,你知道,它是客户机。