2014-05-01 59 views
2

执行以下操作:浏览器独特的领域,在服务器端

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

是否req对象包含唯一的每个浏览器会话的东西吗?

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

我想这样的领域是在req.socket对象presend。当使用socket.io库我有一个client.id字段。

我可以在没有在客户端设置Cookie的情况下做到这一点吗?

回答

1

如在Node.JS API documentation中所述,req参数用于访问标题,数据和响应状态(请参阅HTTP响应代码)。

检查每个浏览器的req对象太困难了,因为有很多属性和方法(这里有很多讨论)。但是,如果您要检查标题(req.headers),则会看到req个对象之间的小差异。比如我开了一个新的谷歌浏览器Icognito窗口和新的私人的Windows在Firefox和这些标题:

{ 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' } 

所以,在两个对象都是相同的属性只有hostconnection。但是,如果您使用不同的子域名称调用服务器,则主机可能会有所不同(例如:www

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

+0

但是可以从请求传递标头,并且它们可以变为非唯一的.. –