【JavaScript】Cookie詳細

2442 ワード

前言:
  • Cookieとは、ウェブブラウザに格納されている少量のデータであり、具体的なウェブサイトに関連している.Cookieデータはブラウザとサーバ間で自動的に伝送されますので、サーバ側でもクライアントに格納されているCookie値を読み書きできます.JavaScriptでは、Cookieは状態を保存するために使用され、ブラウザのためのアイデンティティ識別メカニズムを提供する.
  • は、Cookieが利用可能かどうかを検出する.navigator.co okie Enbaled
  • Cookieの有効期間とスコープ
    Cookieのデフォルトの有効期間はとても短いです.ブラウザのセッション期間だけです.Cookieの有効期限を延長したい場合は、max-age属性を設定することにより、設定することができます.Cookieの作用領域はlocastrageと同様であり、文書ソースと文書経路によっても決定される.デフォルトでは、Cookieは、そのページを作成するためのものであり、このページと同じディレクトリまたはサブディレクトリの下の他のウェブページが見られます.Cookieのpath属性を設定することにより、Cookieの作用領域を変更することができ、pathを「/」に設定すると、Cookieにlocastrageの作用領域、すなわち文書ソース全体を持たせることと同じである.Cookieの作用領域はデフォルトではドキュメントソース内に制限されています.同じサーバの下で異なるサブドメインのクロスドメインアクセスCookieを実現したいならば、a.example.comがb.example.comで設定されたCookieにアクセスしたいなら、Cookieのdomain属性を設定することにより実現できます.a.example.comの次のページにCookieを設置し、そのpathを「/」に設定し、domainを「.example.com」に設定して、このCookieはexample.comドメインのすべてのページに表示されます.また、Cookieのdomainは現在のサーバのドメインにしか設定できません.Cookieが異なる親ドメインでのクロスドメインアクセスを実現するためには、scriptタグ、隠しiframeなど、他のクロスドメイン方式を参照することができる.
    Cookieの作成と保存
    Cookieに対するすべての操作は、documentオブジェクトのCookie属性を読んで書きます.Cookieの値はすべてキーペアとして記憶されています.
    //      Cookie,          
    function setCookie(c_name,value,expiredays){
         var exdate=new Date();
         exdate.setDate(exdate.getDate()+expiredays);
         //encodeURIComponent()   URI     
         document.cookie=c_name+ "=" +encodeURIComponent(value)+
    ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
    }
    
    同様に、path、domainなどの属性を設定するには、Cookie値の後に次のように追加する必要があります.path=path
    Cookieの読み込み
    document.co okieを使用してCookieの値を取得することができますが、この値は文字列であり、Cookieの値をより良く見るために、Cookieの名前値をsplit()法で分離することがあります.
    function getCookie(){
        //          
        var cookie = {};
        var all = document.cookie;
        if(all === null){
            return cookie;
        }
        //   Cookie     
        var list = all.split(';');
        for(var i = 0;i < list.length;i++){
            //           
            var p = list[i].indexOf('=');
            //        
            var name = list[i].substring(0,p);
            var value = list[i].substring(p+1);
            //      
            value = decodeURIComponent(value);
            //           
            cookie[name] = value;
        }
        return cookie;
    }
    
    Cookieの限界
  • Cookieは少量のデータしか記憶できません.各Cookieのサイズは4 KBを超えません.RFC規格は、ブラウザが300個以上のCookieを保持することを許可しない.各ウェブサーバのために保存されるCookie数は20個を超えない.
  • JavaScriptでCookieを使用すると、暗号化機構は一切採用されないので、それらは安全ではない.