如何记住客户端的数据?

我有一些对每个客户都是独一无二的信息。 这不是login信息,而只是客户端的一些通用数据 – 例如,说客户端的地址。

现在,当客户端第一次连接服务器时,我会读取客户端的地址。

随后,每当客户端向服务器发出请求时,我想使用从第一个请求中读取的地址。

我该怎么做呢? 我的意思是,如何在服务器本身上存储客户端的一些信息,以便每次请求时,我不必再次读取(从数据库)地址,而是直接从说,全局variables或类似的一个请求头或这些行上的东西…我怎样,附加到每个客户端的地址,以便从客户端的未来请求,我可以直接从客户端的请求本身读取地址信息,而无需再次查询数据库…

编辑 – 这需要快递,没有注意到你的问题没有标记明确。 如果你没有使用express,你可能想看看connect.session例子 ,这是表示在后台用来填充req.session


具体取决于您想要对数据执行的操作,您可能更愿意使用req.session来存储临时信息,直到客户端closures窗口或其cookie超时。 以下是一个跟踪未来请求地址的例子:

 var express = require('express'); var app = express(); app.use(express.logger()); app.use(express.cookieParser()); app.use(express.bodyParser()); app.use(express.session({secret:'$tackoverflow-rules'})); app.get('/', function(req, res){ if(req.session.address === undefined){ res.send(200,'<html><body><form action="address" method="post">' +'<input type="text" name="address" placeholder="Enter address">' +'</form></body></html>'); } else { res.send(200,'<html><body><span>I know that you live at '+req.session.address+'!</span></body></html>'); }; }); app.post('/address', function(req, res){ if(req.body.address !== undefined && req.body.address !== ""){ req.session.address = req.body.address; res.redirect('/'); } else { req.session.address = undefined; res.redirect('/'); }; }); require('http').createServer(app).listen(3000); 

如果数据显示在网页上,则可以将信息存储在Cookie或localStorage中。 如果您使用的是jsp或php,我会将它存储在一个会话中。 你在用什么客户?

您可以使用客户端地址创build一个全局对象作为存储信息的密钥:

 var client = {} //on connect client[clientID] = {address: clientAddress} //so on //To access client[clientID].address; //or whatever you need 

这是我用socket.io存储客户端特定信息的方式

如果数据很小,您可以将数据分配给一个cookie,这样它将在每次请求到服务器时来回传递(Localstorage将允许它保留在客户端上,但不会再次传递给服务器上的下一个请求)

你可以用服务器上的这个数据在内存中保存一个集合,并且将其作为@tymeJV来查找,但是只有当数据不是太大,并且运行在一台服务器上的时候才会起作用。 一旦数据增长,你可能会耗尽内存。 此外,如果服务器重新启动,您将失去此信息。 只要你添加第二台服务器,这种方法将无法工作,因为你需要确保客户端连接到同一台服务器(我想你可以用粘滞的会话来做)

您可能需要考虑像Redis或其他快速数据库(如MongoDB)这样的会话信息来caching这些数据。 这样,你将有一个中央商店,可以优化性能,使您的网站不会陷入困境,同时检查这些信息。