Uninitialized Sessions
この部分ではresaveとsaveUnifiedの違いは
falseに変換する方法について説明します。
resave: true,
saveUninitialized: true,
この部分ですsession authentication(인증)
を使用すると、発生する可能性のある問題を学習できます.見えるビスケットを拭き取るリフレッシュすると新しいクッキーがあります.このプロセスは自動的に完了し、
DB
も保存されています.ビスケットをもう一度拭き取る.リフレッシュ後はCookieがないので.クッキーを1つもらい、
DB
も1つ増えました.これは、アクセスしたすべてのユーザーにCookieとセッションを作成することを意味します.
ユーザーにビスケットを与え、
session
はDB
に貯蔵される.ロボット(偽者)がサイトにアクセスしたり、ログインせずに閲覧したいユーザーがサイトにアクセスしたりした場合.
すべての訪問者に対してCookieおよび
session
が作成され、session
はすべてDB
に格納される.それはいい考えではない.ログインしたユーザーの
session
のみを保存したほうがいいかもしれません.匿名のユーザーも気を使う必要はない.ブラウザがバックエンドにアクセスするたびに、
DB
には、クッキーとsession
が1つずつ貯蔵されている.もう一度言いますが、これはよくないかもしれません.10万人の訪問者が来ると仮定します.
あなたはその10万人の
session
を創造しますか?では、大きなDB
を維持するためには、たくさんのお金がかかります.解決策はすべての訪問者にビスケットをあげないことです.その必要がないからです.
覚えたいユーザーにだけクッキーをあげます.インターネットで動画を閲覧したいなら
何をしても覚える必要はないのでクッキーをあげる必要はありません
でもログインしたら?その時はクッキーを渡して
だからresaveをfalseに変えました
server.js
からresave: false,
saveUninitialized: false
saveUninitialized
もfalse
に変更されました.ブラウザからCookieを削除します.その後、すべてのセッションをクリアします.入力
db.sessions.remove({})
db.sessions.find()
確認を入力します.DB
にセッションは存在しません.今からサイトにアクセスして、クッキーを受け取ったかどうかを確認します.更新しましたが、ビスケットはあげません.
今はサイトの訪問者なのに、届いていないクッキー.
DB
度を確認してみます.ここにも
session
はありません.saveUninitialized: false,
では、この設定は何を意味しますか?ご覧のように、saveUninitialized
はfalse
です.A session is uninitialized when it is new but not modified.
セッションは、新規作成および変更されていないときにUninitialized
と呼ばれます.したがって、変更されていない場合は
Uninitialized
(初期化されていない)という新しいセッションがあります.では、どこで会話を修正すればいいのでしょうか.セッションは1つの場所でのみ変更できます.
userController
です.ここが会話を修正する場所です. req.session.loggedIn = true;
req.session.user = user;
};
この2行は、実際にはセッションinitialize
(初期化)の部分である.これを覚えているからです.この設定は、セッションを変更するときにのみ
DB
に保存され、Cookieが渡されます.セッションを変更するのはログイン時のみです.
すなわち、バックエンドは、ログインユーザのみにCookieを提供するように設定される.
匿名ユーザーにビスケットをあげません.
これは良いアイデアで、バックエンドが
DB
に格納されているのはsession
認証の問題の一つです.解決策の一つはtoken authenticationです。
たとえば、
iOS
またはandroidアプリケーションを作成する場合、それらはクッキーを持たないため、token
を使用します.しかし、ここでは違います.ブラウザで認証を行うため、Cookieを使用してセッション認証を行うことができます.
もちろん、ブラウザで
token
を使用することはできますが、現在の状況では理解しにくいです.いずれにしても、
session authentication
はブラウザで良好に動作しています.では、実際に会話を修正してみましょう.ログインしてみてください.
もしそうであれば、ログイン時にCookieが受信され、セッションは
DB
に保存されます.ログインしてみました.セッションを受信し、セッション
DB
にセッションがあることを確認します.loggedIn
とtrue
の情報もあります.今は覚えたい人だけにビスケットをあげます.それはプレイヤーです.
匿名ユーザーではなく、ログインしている人です.
次のセクションでは表示されますが、このセッションにはより多くの設定があります.
app.use(
session({
secret: "Hello!",
resave: false,
saveUninitialized: false,
store: MongoStore.create({ mongoUrl: "mongodb://127.0.0.1:27017/wetube" }),
})
);
さらにuser
があり、前の部分で述べたように、この部分を保護すべきです.この部分と
secret
部分はコードに表示されないからです.Webサイトをサーバに配備する場合、
URL
をここに残すことはできません.DB URL
にはDB
とusername
があるからです.今はまだいいです.
password
は今Mongo URl
なので、誰もが違います.いずれにしても、このような方法で
localhost
をコピーしないほうがいいです.string
を知って接続している人がいるかもしれないので危険です.DB URl
もそうです.次のセクションでは、まだ理解されていないsecret
があるので、クッキーをもっと理解します.たとえば、
field
とDomain
と書かれたsession
について説明します.Expires
とHttpOnly
もあります.クッキーを構成しているからですまた,コードには
Secure
が用いられているが,非表示の方法も分かる.Reference
この問題について(Uninitialized Sessions), 我々は、より多くの情報をここで見つけました https://velog.io/@0_cyberlover_0/Uninitialized-Sessionsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol