1

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

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

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

我该怎么做呢?我的意思是,我如何在服务器本身的客户端上存储一些信息,以便每次请求时,我不必再次(从数据库)读取地址,而是直接从全局变量或类似变量中读取地址请求标头或这些行上的其他内容...如何将地址附加到每个客户端,以便对于来自客户端的未来请求,我可以直接从客户端请求本身读取地址信息,而无需再次查询数据库...

4

4 回答 4

1

编辑 - 这需要快递,没有注意到你的问题没有被标记为快递。如果您不使用 express,您可能需要查看connect.session示例,这就是 express 在幕后使用的填充内容req.session


根据您要对数据执行的具体操作,您可能更喜欢使用它req.session来存储临时信息,直到客户端关闭窗口或他们的 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);
于 2013-11-12T16:08:33.387 回答
0

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

于 2013-11-12T15:42:25.270 回答
0

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

var client = {}
//on connect
client[clientID] = {address: clientAddress} //so on

//To access
client[clientID].address; //or whatever you need

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

于 2013-11-12T15:43:07.513 回答
0

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

您可以使用服务器上的这些数据在内存中保存一个集合,并按照@tymeJV 的指示进行查找,但这仅在您的数据不太大并且在单个服务器中运行时才有效。一旦数据增长,您可能会耗尽内存。此外,如果服务器重新启动,您将丢失此信息。一旦您添加了第二台服务器,这种方法将不起作用,因为您需要确保客户端连接到同一台服务器(我想您可以使用粘性会话来做到这一点)

您可能希望考虑使用 Redis 或其他快速数据库(如 MongoDB)缓存此数据以获取此类会话信息。这样,您将拥有一个可以针对性能进行优化的中央存储,因此您的站点在检查此信息时不会陷入困境。

于 2013-11-12T15:49:27.220 回答