ノード内のセッションとは何ですか?使い方?
この記事の内容は、ノードのセッションとは何ですか?使い方?困っている友人は参考にしていただければ幸いです。
はじめに
前回の記事で、nodeのCookieについて紹介しましたが、今回は引き続きセッションについて説明していきます。
セッションとは
セッションは単なるセッションですが、セッションとは何でしょうか?
セッションは、接続よりも粒度の高い概念です。セッション
には複数の接続
が含まれる場合があり、各接続はセッションの操作とみなされます。
ユーザーが Web ページ間を移動しても、Session オブジェクトに格納されている変数は失われませんが、ユーザー セッション全体にわたって保持されます。
ユーザーがアプリケーションから Web ページをリクエストすると、ユーザーがまだセッションを持っていない場合、Web サーバーは自動的に Session オブジェクトを作成します。セッションが期限切れになるか放棄されると、サーバーはセッションを終了します。
ここまで述べたところで、まずこの製品を見てみましょう。
セッションミドルウェアによって生成されたセッションは、Cookie 情報を含むオブジェクトであることがわかりました。
ノード内のセッション
最初に、Express フレームワーク、cookieParser ミドルウェア、Express セッション ミドルウェアをインストールします
npm i express --save npm i cookie-parser --save npm i express-session --save
デフォルトでは、Express セッション ミドルウェアはセッション情報を保存します。メモリに格納されており、 署名付き cookie
である必要があるため、cookieParser() を使用するときは、 秘密鍵
を渡す必要があります。秘密キーがない場合は、「エラー: セッションには秘密のオプションが必要です」というプロンプトが表示されます。
コードは次のとおりです。
var express = require('express'); var cookieParser = require('cookie-parser'); var session = require('express-session'); var app = express() app.use(cookieParser()) const hour = 1000 * 60 * 60; var sessionOpts = { // 设置密钥 secret: 'a cool secret', // Forces the session to be saved back to the session store resave: true, // Forces a session that is "uninitialized" to be saved to the store. saveUninitialized: true, // 设置会话cookie名, 默认是connect.sid key: 'myapp_sid', // If secure is set to true, and you access your site over HTTP, the cookie will not be set. cookie: { maxAge: hour * 2, secure: false } } app.use(session(sessionOpts)) app.use(function(req, res, next) { if (req.url === '/favicon.ico') { return } // 同一个浏览器而言,req是同一个 var sess = req.session; console.log(sess) if (sess.views) { sess.views++; } else { sess.views = 1; } res.setHeader('Content-Type', 'text/html'); res.write('<p>views: ' + sess.views + '</p>'); res.end(); }); app.listen(4000);
上記のコードは、単純な ## を実装しています。 # ページビュー数 関数。
上記のコードを実行すると、ブラウザを開いてページを継続的に更新し、ノード プログラムに出力される sess 値を確認できます。
同じブラウザでページが更新されると、同じセッションがコンソールに表示されますが、ビューの値が変更されていることがわかりました。つまり、複数の http 接続が同じセッションに対応しています。
キー/値ストレージ が最適です。ここでは、最初に Redis を使用してセッション情報を保存します。
npm i connect-redis --save
var express = require('express'); var cookieParser = require('cookie-parser'); var session = require('express-session'); var RedisStore = require('connect-redis')(session); var app = express() app.use(cookieParser()) var options = { host: '127.0.0.1', port: 6379, db: 1, // Database index to use. Defaults to Redis's default (0). prefix: 'ID:' // Key prefix defaulting to "sess:" // pass: 'aaa' // Password for Redis authentication } const hour = 1000 * 60 * 60; var sessionOpts = { store: new RedisStore(options), // 设置密钥 secret: 'a cool secret', // Forces the session to be saved back to the session store resave: true, // Forces a session that is "uninitialized" to be saved to the store. saveUninitialized: true, // 设置会话cookie名 key: 'myapp_sid', // If secure is set to true, and you access your site over HTTP, the cookie will not be set. cookie: { maxAge: hour * 8, secure: false } } app.use(session(sessionOpts)) // 如果没有secret,会提醒 Error: secret option required for sessions app.use(function(req, res, next) { if (req.url === '/favicon.ico') { return } var sess = req.session; var id = req.sessionID; // session ID, 只读 console.log(sess, id); if (sess.views) { sess.views++; // 如果放在res.end()后,不会自增 res.setHeader('Content-Type', 'text/html'); res.write('<p>views: ' + sess.views + '</p>'); res.write('<p>expires in: ' + (sess.cookie.maxAge / 1000) + 's</p>'); res.end(); } else { sess.views = 1; res.end('welcome to the session demo. refresh!'); } }); app.listen(4000);
npm i connect-mongo --save
var express = require('express'); var cookieParser = require('cookie-parser'); var session = require('express-session'); var MongoStore = require('connect-mongo')(session); const hour = 1000 * 60 * 60 var app = express() app.use(cookieParser()) app.use(session({ secret: 'a cool secret', key: 'mongo_sid', cookie: { maxAge: hour * 8, secure: false }, resave: true, saveUninitialized: true, store: new MongoStore({ url: 'mongodb://@localhost:27017/demodb' }) })); app.use(function(req, res, next) { if (req.url === '/favicon.ico') { return } var sess = req.session; var id = req.sessionID; // session ID, 只读 console.log(sess, id); if (sess.views) { sess.views++; } else { sess.views = 1; } res.setHeader('Content-Type', 'text/html'); res.write('<p>views: ' + sess.views + '</p>'); res.write('<p>expires in: ' + (sess.cookie.maxAge / 1000) + 's</p>'); res.write('<p>httpOnly: ' + sess.cookie.httpOnly + '</p>'); res.write('<p>path: ' + sess.cookie.path + '</p>'); res.write('<p>secure: ' + sess.cookie.secure + '</p>'); res.end(); }); app.listen(4000);
実際、ブラウザが最初のリクエストを開始すると、セッション ミドルウェアは
session オブジェクト (Cookie 情報を含む) を生成し、同時にこのセッション オブジェクトは mongoDb データベースに保存されます。リクエストが を返すと、ブラウザ クライアントは自動的に Cookie をこのセッション オブジェクトに保存します。ブラウザはセッション オブジェクトではなく Cookie を保存することに注意してください。
この Cookie には有効期限があります。たとえば、上記のコードの設定は 8 時間です。つまり、この Cookie は 8 時間後にブラウザから自動的に消えます。
ノードのexpressでsocket.io_node.jsを使用する方法
以上がノード内のセッションとは何ですか?使い方?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









ソートインデックスは、特定のフィールドによるコレクション内のドキュメントのソートを許可するMongoDBインデックスの一種です。ソートインデックスを作成すると、追加のソート操作なしでクエリ結果をすばやく並べ替えることができます。利点には、クイックソート、オーバーライドクエリ、およびオンデマンドソートが含まれます。構文はdb.collection.createIndex({field:&lt; sort and gt;})、where&lt; sort and&gt; IS 1(昇順)または-1(降順注文)です。また、複数のフィールドをソートするマルチフィールドソートインデックスを作成することもできます。

Debian SystemsのPostgreSQLデータベースのパフォーマンスを改善するには、ハードウェア、構成、インデックス、クエリ、その他の側面を包括的に検討する必要があります。次の戦略は、データベースのパフォーマンスを効果的に最適化できます。1。ハードウェアリソース最適化メモリ拡張:適切なメモリは、データとインデックスをキャッシュするために重要です。高速ストレージ:SSD SSDドライブを使用すると、I/Oパフォーマンスが大幅に向上する可能性があります。マルチコアプロセッサ:マルチコアプロセッサを最大限に活用して、並列クエリ処理を実装します。 2。データベースパラメーターチューニングShared_Buffers:システムメモリサイズの設定によると、システムメモリの25%〜40%に設定することをお勧めします。 work_mem:ソートとハッシュ操作のメモリを制御します。通常は64MBから256mに設定されています

MongoDBは、構造化されていないデータと迅速な反復の処理により適していますが、Oracleは厳格なデータの一貫性と複雑なクエリを必要とするシナリオにより適しています。 1.MongoDBのドキュメントモデルは、柔軟性があり、複雑なデータ構造の処理に適しています。 2。Oracleの関係モデルは、データの一貫性と複雑なクエリのパフォーマンスを確保するために厳格です。

Debian Systemsでは、Directoryコンテンツを読み取るためにReadDirシステム呼び出しが使用されます。パフォーマンスが良くない場合は、次の最適化戦略を試してください。ディレクトリファイルの数を簡素化します。大きなディレクトリをできる限り複数の小さなディレクトリに分割し、Readdirコールごとに処理されたアイテムの数を減らします。ディレクトリコンテンツのキャッシュを有効にする:キャッシュメカニズムを構築し、定期的にキャッシュを更新するか、ディレクトリコンテンツが変更されたときに、頻繁な呼び出しをreaddirに削減します。メモリキャッシュ(memcachedやredisなど)またはローカルキャッシュ(ファイルやデータベースなど)を考慮することができます。効率的なデータ構造を採用する:ディレクトリトラバーサルを自分で実装する場合、より効率的なデータ構造(線形検索の代わりにハッシュテーブルなど)を選択してディレクトリ情報を保存およびアクセスする

MongoDBデータベースをセットアップするには、コマンドライン(使用およびdb.createcollection())またはMongoシェル(Mongo、Use、DB.CreateCollection())を使用できます。その他の設定オプションには、データベースの表示(DBSの表示)、コレクションの表示(コレクションの表示)、データベースの削除(db.dropdatabase())、db。&amp; collection_name&amp; gt; drop())、挿入文書(db; lt; lt; lt; collection

Redisの主な機能には、速度、柔軟性、豊富なデータ構造のサポートが含まれます。 1)速度:Redisはメモリ内データベースであり、読み取り操作はほとんど瞬間的で、キャッシュとセッション管理に適しています。 2)柔軟性:複雑なデータ処理に適した文字列、リスト、コレクションなど、複数のデータ構造をサポートします。 3)データ構造のサポート:さまざまなビジネスニーズに適した文字列、リスト、コレクション、ハッシュテーブルなどを提供します。

Redisのコア関数は、高性能のメモリ内データストレージおよび処理システムです。 1)高速データアクセス:Redisはデータをメモリに保存し、マイクロ秒レベルの読み取り速度と書き込み速度を提供します。 2)豊富なデータ構造:文字列、リスト、コレクションなどをサポートし、さまざまなアプリケーションシナリオに適応します。 3)永続性:RDBとAOFを介してディスクにデータを持続します。 4)サブスクリプションを公開:メッセージキューまたはリアルタイム通信システムで使用できます。

DebianシステムでMongoDBデータベースを暗号化するには、次の手順に従う必要があります。ステップ1:MongoDBのインストール最初に、DebianシステムがMongoDBをインストールしていることを確認してください。そうでない場合は、インストールについては公式のMongoDBドキュメントを参照してください:https://docs.mongodb.com/manual/tutorial/install-mongodb-onedbian/-step 2:暗号化キーファイルを作成し、暗号化キーを含むファイルを作成し、正しい許可を設定します。
