【ASP.NET】セッションとクッキーの比較


今回の試験メンテナンスでは、古い知識をたくさん勉強し、新しい知識もたくさん勉強しました.このブログで皆さんと共有したいのは、セッションとクッキーのつながりと違いです.
【事業概要】
開発では、このような変数が必要になるのは避けられません.この段階ではそれはありませんが、前の段階や他の方法では、その値を簡単に取得できるように保存する必要があります.C/S開発の下で、グローバル変数を定義することができます.では、B/S開発の下で、私たちが使うのはsessionやcookieです.
【事業背景】
今回のアンケートシステムの開発では、専門、カリキュラム、ログインユーザーなど、いくつかの変数がいつでも必要です.そこで、大陸は私にそれらをsessionに保存させました.システムにはsessionがユーザーのログイン情報を保存するのに役立つからです.プロフェッショナル、カリキュラムでは、いつでもどこでも値を得ることができます.
【項目質問】
以前、私はずっと専門と課程のこのような額の変数をsessionの中に保存していましたが、システムが完成しそうになった夜、私の頭の中にcookieの概念が現れて、私はこれらの変数をcookieの中に置いてもいいですか?もしよろしければ、クッキーに置くのとセッションに置くのとでは、どちらが違うのでしょうか.そこで、私は質問の答えを探し始めました.
【プロジェクト開発】
(1)まず、Sessionを使用して変数を格納するコードを見てみましょう.
        /// <summary>
        ///          ,           Session ——   ——2016 1 8 16:23:27
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void dropCollege_SelectedIndexChanged(object sender, EventArgs e)
        {
            //      
            string departmentName = dropCollege.SelectedValue.ToString().Trim();
            //       Session 
            Session["departmentName"] = departmentName;
        }  

他の方法でもこの2つの値を使用する必要がある場合は、Sessionから直接取得します.
        /// <summary>
        ///    Excel——   ——2016 1 8 16:24:48
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void lbnExportExcel_Click(object sender, EventArgs e)
        {
            //    
            string departmentName = dropCollege.SelectedValue.ToString().Trim();
            //    
            string courseName = dropCourse.SelectedValue.ToString().Trim();
            //    
            if (departmentName == "" || courseName == "")
            {
                return;
            }
            ///         
            CheckAnswerEntity checkanswerentity = new CheckAnswerEntity();
            /// Session       
            checkanswerentity.CourseName = Session["courseName"].ToString().Trim();
            /// Session       
            checkanswerentity.MajorName = Session["departmentName"].ToString().Trim();  
        } 

(2)次は私がCookieを利用してカリキュラムと専門情報を格納するコードです.
        /// <summary>
        ///          ,           Session ——   ——2016 1 8 16:28:04
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
protected void dropCollege_SelectedIndexChanged(object sender, EventArgs e)
        {
            //      
            string majorName = dropCollege.SelectedValue.ToString().Trim();
            //     Cookie  ,       cookie
            HttpCookie majorNameCookie = new HttpCookie("majorName");
            //    cookie  
            majorNameCookie.Value = majorName;
            //    cookie   Cookies   
            Response.Cookies.Add(majorNameCookie);
        } 

他の方法でもこの2つの値を使用する必要がある場合は、Cookieから直接取得すればいいです.
        /// <summary>
        ///    Excel——   ——2016 1 8 16:29:27
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
    protected void lbnExportExcel_Click(object sender, EventArgs e)
        {
            //    
            string departmentName = dropCollege.SelectedValue.ToString().Trim();
            //    
            string courseName = dropCourse.SelectedValue.ToString().Trim();
            //    
            if (departmentName == "" || courseName == "")
            {
                return;
            }
            //         
            SingleAnswerEntity singleanswerentity = new SingleAnswerEntity(); 
            // Cookie                 
            singleanswerentity.CourseName = Request.Cookies["courseName"].Value;
            // Cookie             
            singleanswerentity.MajorName = Request.Cookies["majorName"].Value;
        }

【プロジェクトの質疑応答】
事実は、sessionでもクッキーでも変数値を格納しても、他の場所で取得できることを証明しています.では、セッションとクッキーの違いはありますか?これから一緒に勉強します.
(1)クッキーとセッションのメカニズム:
Httpプロトコルは無状態のプロトコルであるため,サービス側がユーザの状態を記録する必要がある場合,特定のユーザを何らかのメカニズムで認識する必要があり,このメカニズムがsessionである.
ショッピングカートのような典型的なシーンでは、注文ボタンをクリックすると、Httpプロトコルはステータスがないため、どのユーザーが操作しているのか分からないため、サービス側は特定のユーザーのために特定のセッションを作成し、ユーザーを識別し、追跡するために、ショッピングカートの情報を知ることができます.このセッションはサービス側に保存されています.
しかし、サービス側はどのように特定の顧客を識別しますか?この時クッキーが登場しました.HTTPリクエストのたびに,描画セグメントは応答するクッキー情報をサービス側に送信する.実際、ほとんどのアプリケーションはクッキーでsession追跡を実現しています.
クライアントのブラウザがクッキーを無効にしたらどうしますか?一般に、この場合、Httpインタラクションのたびにsid=***のようなパラメータがURL書き換えという技術が使用され、サービス側はこれに基づいてユーザを識別する.
普段、私达は自分のコンピュータの上でいくつかの経常的で、固定的なウェブサイトを登录して、すべて相応のアカウントとパスワードを保存して、次回は自动的に登录することができます.この情報は実はクッキーに保存されており、ユーザーに大きな便利さを与えています.これもクッキー名の由来で、ユーザーに少し甘い頭を与えます.
(2)クッキーとセッションの違い:
i)クッキーデータはクライアントのブラウザに格納され、セッションデータはサーバに格納される.
ii)クッキーは安全ではなく、他の人は現地に保管されているクッキーを分析し、クッキー詐欺を行うことができる.
iii)セッションは一定時間サーバに保存される.アクセスが増えると、サーバのパフォーマンスが比較的消費されます.
iiii)単一クッキーで保存されているデータは4 kを超えてはいけません.多くのブラウザでは、1つのサイトに最大20個のクッキーを保存することを制限しています.
したがって,多くの場合,ログインなどの重要な情報をセッションに格納し,他の情報を保存する必要がある場合はクッキーに格納することができる.
【項目まとめ】
実は、その前に、他のプロジェクトでもsessionやcookieを使ってデータを保存していましたが、自分も多くのブログを見たことがあります.両者の比較を書いています.
しかし、
自分では体験していないので、応用して、比較して、だから、ただ印象を残しました.
    
それだけに、このプロジェクトでは、自分の何度も使って、条件反射のように、自然とセッションをクッキーに変えてみて、自分の実践を通じて、自分の疑問を解いて、両者のつながりと違いをもっと理解しました.
    
だから、ふだんの耳は染めて、ふだんの潜移は黙化して、ふだんの潤物は音がなくて、結局繭を破って蝶になる時があります.