【深入浅出NodeJS】Cookie&Sessionメカニズム詳細
2961 ワード
1.初対面のCookie
Cookieは最初にLou Montulliによってネットスケープ社が開発したNetscapeブラウザの第一バージョンの時に発明されました.サーバとクライアントの間の状態を記録することができます.最初にユーザが初めてウェブサイトにアクセスするかどうかを判断するために使用されます.
Cookieは実は短いテキスト情報です.クライアント要求サーバは、サーバがユーザ状態を記録する必要がある場合、レスポンスを使用してクライアントブラウザにCookieを発行する.クライアントブラウザはCookieを保存します.ブラウザがこのウェブサイトを再要求すると、ブラウザは要求したURLをこのCookieと一緒にサーバに提出する.このCookieをサーバがチェックして、ユーザ状態を識別する.サーバはまた、必要に応じてCookieの内容を変更することができる.
Cookie値のフォーマットはkey=value形式で、他のいくつかのよく使われている属性を持っています.
Cookie属性: path:このCookieが取得経路 に影響を与えることを示す. Expires&Max-Age:ブラウザのこのCookieがいつ期限が切れるかを知らせるために使用されます.この属性を設定しないと、ブラウザを閉じたらこのCookieがなくなります.Expires値はUTCフォーマットの時間文字列で、ブラウザのこのCookieの期限が切れる具体的な時間を知らせるために使用されます.Max-AgeはCookieの最大のライフサイクルを表しています.ブラウザCookieがどれぐらい経ったら期限が切れるかを知らせます.具体的な時間ではありません. HttpOnly:Cookie値 を変えることができないとブラウザに知らせる Secure:Secure値がtrueの場合、作成されたCookieはHTTPS接続中にブラウザによってサーバ端に渡されて検証するしかないことを示す. Cookieを利用してユーザのアクセス状態を判断する方法を以下に示す.
クライアントから送信されたCookieは、レポートを要求するCookieフィールドでCookieを必要とする場合、まずそれを解析します.
Cookieの実現メカニズムのため、Cookieが期限切れにならない限り、ブラウザは要求ごとにCookieをサーバに送信します.Cookieが設定しすぎると、要求ヘッダが大きすぎて、帯域幅の無駄が発生します.したがって、Cookieの性能最適化も注目すべき問題である.どのように性能最適化を行いますか? Cookieのサイズを減らす は、無効なCookieの伝送を低減するために、Cookieを必要としないコンポーネントにドメイン名を変更する である.減少DNSクエリ 前述のdocument.co okie方法によれば、フロントエンドはJavaScriptによってCookieを修正することもできる.これは現在のほとんどの広告サイトの一般的なやり方です.第三者のシナリオを組み込むことによって、Cookieと現在のページを結びつけることによって、ユーザーのブラウズ行為を獲得できます.広告主は広告を方向付けします.しかし、あまり心配しなくてもいいです.Cookieはユーザーを識別するだけで、より多くのユーザ情報を取得することができません.自分の訪問が記録されたくないなら、直接第三者の脚本を無効にしたらいいです.
サーバー側のセッションについては、次の文章で詳しく説明します.
私の個人ブログ:http://frankxiong.xyz
参考書:『深浅浅出NodeJS』
Cookieは最初にLou Montulliによってネットスケープ社が開発したNetscapeブラウザの第一バージョンの時に発明されました.サーバとクライアントの間の状態を記録することができます.最初にユーザが初めてウェブサイトにアクセスするかどうかを判断するために使用されます.
Cookieは実は短いテキスト情報です.クライアント要求サーバは、サーバがユーザ状態を記録する必要がある場合、レスポンスを使用してクライアントブラウザにCookieを発行する.クライアントブラウザはCookieを保存します.ブラウザがこのウェブサイトを再要求すると、ブラウザは要求したURLをこのCookieと一緒にサーバに提出する.このCookieをサーバがチェックして、ユーザ状態を識別する.サーバはまた、必要に応じてCookieの内容を変更することができる.
Cookie値のフォーマットはkey=value形式で、他のいくつかのよく使われている属性を持っています.
Cookie属性:
クライアントから送信されたCookieは、レポートを要求するCookieフィールドでCookieを必要とする場合、まずそれを解析します.
var parseCookie = function(cookie) {
var cookies ={};
if (!cookie) {
return cookies;
}
var list = cookie.split(';');
for( var i=0;i
トラフィック論理コードが実行される前に、reqオブジェクトにマウントされます.function( req,res){
req.cookies = parseCookie(req.headers.cookie);
handle(req,res);
}
前の文によると、Cookieは応答文にmaxAge、pathなどの属性を含んでいることが分かりました.Cookieのフォーマットを逐次的に規格に合う文字列にする必要があります.コードは以下の通りです.var serialize = function(name,val,opt){
var pairs = [name + '=' +encode(val)];
opt = opt || {};
if(opt.maxAge) pairs.push('Max-Age=' + opt.maxAge);
if(opt.domin) pairs.push('Domin=' + opt.domin);
if(opt.path) pairs.push('Path=' + opt.path);
if(opt.expires) pairs.push('Expires=' + opt.expires.toUTCString());
if(opt.httpOnly) pairs.push('HttpOnly);
if(opt.secure) pairs.push('Secure');
return pairs.join(';');
}
アクセス論理コードの作成var handle = function(req,res){
if(!req.cookies.isVisit){
res.setHeader('Set-Cookie',serialize('isVisit','1'));
res.writeHead(200);
res.end(' ');
}else{
res.writeHead(200);
res.end(' ');
}
};
2.Cookieの性能影響Cookieの実現メカニズムのため、Cookieが期限切れにならない限り、ブラウザは要求ごとにCookieをサーバに送信します.Cookieが設定しすぎると、要求ヘッダが大きすぎて、帯域幅の無駄が発生します.したがって、Cookieの性能最適化も注目すべき問題である.どのように性能最適化を行いますか?
サーバー側のセッションについては、次の文章で詳しく説明します.
私の個人ブログ:http://frankxiong.xyz
参考書:『深浅浅出NodeJS』