【问题标题】:Browser unique field on the server side服务器端的浏览器唯一字段
【发布时间】:2014-05-01 11:33:32
【问题描述】:

执行以下操作:

require ("http").createServer (function (req, res) {
   /* get the browser unique id */
}).listen (8080);

req 对象是否包含每个浏览器会话的独特内容?

例如:有两个浏览器选项卡,唯一字段应该相同。但是从两个不同的浏览器访问同一个页面(应该有两个不同的值:每个浏览器一个)。

我想req.socket 对象中存在这样的字段。当使用 socket.io 库时,我有一个 client.id 字段。

我可以在客户端不设置 cookie 的情况下执行此操作吗?

【问题讨论】:

    标签: node.js sockets http httprequest


    【解决方案1】:

    正如用 Node.JS API documentation 编写的那样,req 参数用于访问标头、数据和响应状态(请参阅 HTTP 响应代码)。

    检查每个浏览器的req 对象太难了,因为属性和方法的数量很多(这里有很多讨论)。但是,如果您检查标头(req.headers),您会发现req 对象之间存在细微差别。例如,我在 Firefox 中打开了一个新的 Google Chrome Icognito Window 和一个新的 Private Windows 以及这些标题:

    { host: 'lvh.me:8000',
      'user-agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0',
      accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
      'accept-language': 'en-US,en;q=0.5',
      'accept-encoding': 'gzip, deflate',
      connection: 'keep-alive' }
    { host: 'lvh.me:8000',
      connection: 'keep-alive',
      accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
      'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36',
      'accept-encoding': 'gzip,deflate,sdch',
      'accept-language': 'en-US,en;q=0.8' }
    

    因此,两个对象中唯一相同的属性是 host 和 connection。但是如果您使用不同的子域调用服务器,则主机可能会有所不同(例如:www)

    如果您可以检查整个对象,您可能会发现有关每个浏览器的更多信息。

    【讨论】:

      猜你喜欢
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      相关资源
      最近更新 更多