1

私は、各クライアントに固有の情報をいくつか持っています。これはログイン情報ではなく、クライアントの一般的なデータです。たとえば、クライアントのアドレスなどです。

ここで、クライアントが初めてサーバーに接続するときに、クライアントのアドレスを読み取ります。

その後、クライアントがサーバーにリクエストを行うたびに、最初のリクエストから読み取ったアドレスを使用したいと思います。

どうすればいいですか?つまり、クライアントに関する情報をサーバー自体に保存して、リクエストごとに(DBから)アドレスを再度読み取る必要がなく、たとえばグローバル変数などから直接読み取るにはどうすればよいですかリクエストヘッダーまたはそれらの行の何か...クライアントからの将来のリクエストのために、DBに再度クエリを実行することなく、クライアントのリクエスト自体からアドレス情報を直接読み取ることができるように、各クライアントにアドレスを添付するにはどうすればよいですか...

4

4 に答える 4

1

edit - this requires Express, didn't notice that your question was not tagged express. if you aren't using express you may want to look at the connect.session example, this is what express uses behind the scenes to populate req.session.


Depending on exactly what you want to do with the data, you might prefer to use req.session to store temporary information until the client closes the window or their cookie times out. Here's an example that keeps track of the address across future requests:

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 を使用すると、クライアントにデータを保持できますが、サーバーに再度渡されることはありません)。サーバーは次のリクエストで)

サーバー上のこのデータを使用してコレクションをメモリに保持し、@tymeJV が示すように検索できますが、これは、データが大きすぎず、単一のサーバーで実行している場合にのみ機能します。データが大きくなるとすぐに、メモリが不足する可能性があります。また、サーバーが再起動すると、この情報が失われます。2番目のサーバーを追加するとすぐに、クライアントが同じサーバーに接続していることを確認する必要があるため、このアプローチは機能しません(スティッキーセッションでできると思います)

この種のセッション情報については、Redis や MongoDB などの別の高速データベースでこのデータをキャッシュすることを検討することをお勧めします。そうすれば、パフォーマンスを最適化できる中央ストアが得られるため、この情報をチェックしている間にサイトが行き詰まることはありません。

于 2013-11-12T15:49:27.220 に答える
0

データが Web ページに表示されている場合は、Cookie または localStorage に情報を保存できます。jsp または php を使用している場合は、セッションに保存します。どのクライアントを使用していますか?

于 2013-11-12T15:42:25.270 に答える