如何记住客户端的数据?

时间:2013-11-12 15:39:19

标签: node.js express

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

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

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

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

4 个答案:

答案 0 :(得分:1)

编辑 - 这需要Express,没有注意到您的问题没有标记为快递。如果您没有使用快递,您可能需要查看connect.session example,这就是幕后填写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);

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

这是我使用socket.io

存储客户特定信息的方式

答案 3 :(得分:0)

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

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

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