我有一些每个客户都有的信息。这不是登录信息,而只是客户端的一些通用数据 - 例如,说明客户端的地址。
现在,当客户端第一次连接服务器时,我将读取客户端的地址。
随后,每次客户端向服务器发出请求时,我都想使用我从第一个请求中读取的地址。
我该怎么做?我的意思是,如何在服务器本身的客户端上存储一些信息,以便每次请求时,我不必再次读取地址(从数据库),而是直接从全局变量或类似地读取地址请求标题或这些行上的内容......如何将地址附加到每个客户端,以便将来客户端的请求,我可以直接从客户端的请求本身读取地址信息,而无需再次查询数据库...
答案 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)来缓存此数据,以获取此类会话信息。这样你就可以拥有一个可以针对性能进行优化的中央商店,这样你的网站就不会在检查这些信息时陷入困境。