Cookieとは、ブラウザがサーバーにアクセスした後にサーバーからブラウザに送信されるデータです。 Cookie は http プロトコルの一部です。クライアントが初めてサーバーにリクエストを送信すると、サーバーはクライアントに Cookie を送信して、次回同じサーバーにリクエストを送信するときに、サーバーはクライアントの Cookie を識別することで対応するアクションを実行します。たとえば、Web サイトにログインすると、Web サイトにユーザー名とパスワードが記録されるため、次回ログインするときにユーザー名とパスワードを入力することなく直接ログインできます。
Web サーバーは Set-Cookie HTTP メッセージ ヘッダーを送信することで Cookie を作成します。 Set-Cookie メッセージ ヘッダーは次の形式の文字列です:
Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE
NAME: Cookie の名前、値はセットの値です。クッキー。
有効期限: Cookie の有効期限を決定し、Cookie がサーバーに送信されなくなる時期を指定します。この指定された時間が経過すると、ブラウザーは Cookie を削除します。 DATE 属性値は特定の形式である必要があります: Wdy (曜日)、日付-月-年 HH:MM:SS GMT。この形式でない場合は認識されません。有効期限オプションが設定されていない場合、Cookie のライフサイクルは現在のセッションに制限され、Cookie ファイルはブラウザを閉じると自動的に消えます。
Path: Cookie ヘッダーを送信するタイミングを制御します。Web サーバーは、Path で指定されたパスがユーザーが要求したリソース URL に存在する場合にのみ Cookie ヘッダーを送信します。一般に、ユーザーが入力した URL のパス部分に、最初の文字から始まる Path 属性で定義された文字列が含まれている場合、ブラウザはそれがチェックに合格したとみなします。 Path 属性の値が「/」の場合、Web サーバー上のすべての WWW リソースが Cookie を読み取ることができます。 path オプションが設定されていない場合、Path 属性値のデフォルトは、Web サーバーによってブラウザに渡されるリソースのパス名になります。
ドメイン: インターネット ドメイン内のどの Web サーバーがブラウザーによってアクセスされる Cookie を読み取ることができるかを決定します。つまり、このドメインのページのみが Cookie 内の情報を使用できます。 [ドメイン] オプションが設定されていない場合、Cookie 属性値は Web サーバーのドメイン名に設定されます。
需要注意的是,只有在 domain 选项核实完毕之后才会对 path 属性进行比较。
SECURE: 値のないフラグのみ。SSL または HTTPS 経由でリクエストが行われた場合にのみ、セキュア オプションを含む Cookie をサーバーに送信できます。ブラウザと Web サーバー間の通信プロトコルが暗号化認証プロトコルである場合にのみ、ブラウザが対応する Cookie をサーバーに送信することを示します。
JavaScript では、Cookie は状態を保存し、Web ブラウザーに識別メカニズムを提供するために使用されます。 JavaScript では、document.cookie プロパティを通じて Cookie を作成、維持、削除できます。
Cookie を設定する:
document.cookie="userName = mavis ";
各 Cookie は名前と値のペアです。一度に複数の名前と値のペアを設定したい場合は、次のメソッドを使用できます:
document.cookie = "userName=mavis; userId = 023";
Cookie では、escape() を使用します。をエンコードする関数では、セミコロン (;)、カンマ (,)、等号 (=)、スペースなどの一部の特殊記号の 16 進表現を使用できます。ただし、escape() エンコードを使用した後は、値を取り出してから unescape() を使用してデコードし、元の Cookie 値を取得する必要があります。
JavaScript のエスケープ() 関数は、文字列をすべてのコンピューターで読み取れるようにエンコードできます。構文は次のとおりです。escape(string)、string はエスケープまたはエンコードされる文字列です。
Cookie の値を取得する:
document.cookie を使用して、セミコロンで区切られた複数の名前/値で構成される文字列を直接取得します。これらの名前と値のペアには、このドメイン名の下にあるすべての Cookie が含まれます。
var myCookie = document.cookie;
指定された Cookie 値を取得します。
//设置两个cookie document.cookie = "userName=mavis"; document.cookie = "userId = 023"; //获取cookie字符串 var myCookie = document.cookie; var arrCookie = myCookie.split(";"); var userName; for(var i = 0;i < arrCookie.length;i++){ var myArr = arrCookie[i].split("="); //找到名称为userName的cookie,并返回值 if(userName = myArr[0]){ userName = myArr[1]; break; } } alert("welcome " + userName);
Cookie の有効期限を設定します。
ID を使用して初めて Web サイトにログインするとき、一部の Web サイトでは、ID とパスワードを JavaScript に保存するかどうかを確認するプロンプトが表示され、実際に設定されますCookie の有効期限:
document.cookie = "userId = 023; expiress = GMT_String";
このステートメントは、userId Cookie を GMT_String で表される有効期限に設定します。この時間を超えると、Cookie は消滅し、アクセスできなくなります。 Cookie の値を 30 日後に期限切れになるように設定します:
//获取当前时间 var date=new Date(); var expiresDays=30; //将date设置为30天以后的时间 date.setTime(date.getTime()+expiresDays*24*3600*1000); //将userId和userName两个cookie设置为30天后过期 document.cookie = "userId = 023; userName = mavis; expires = " + date.toGMTString();
これにより、userId Cookie を削除できます。
アクセス可能な Cookie のパスを指定します。 パス属性を設定して指定します。
//指定可访问该cookie的目录 document.cookie = "name = mavis; path = cookiePath" //在整个网站都可访问 document.cookie = "name = mavis; path = /"
アクセス可能な Cookie のホスト名を指定します。 ホスト名は、同じドメイン内の異なるホストを参照します。 あるホストで作成された Cookie が別のホストに存在することはできません。アクセスされますが、ドメイン パラメータを通じて制御できます。
例: document.cookie="name=value;domain=.baidu.com"; この設定により、Baidu のすべてのホストが Cookie にアクセスできるようになります。
例:
function getCookie(name){ if (document.cookie.length>0){ start=document.cookie.indexOf(name + "=") if (start!=-1){ start=start + name.length+1 end=document.cookie.indexOf(";",start) if (end==-1) end=document.cookie.length return unescape(document.cookie.substring(start,end)) } } return "" } function setCookie(name,value,expiredays){ var exdate=new Date() exdate.setDate(exdate.getDate()+expiredays) document.cookie=name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString()) } setCookie("username","tank",1800); //设置cookie的值,生存时间半个小时 alert(getCookie('test')); //取得cookie的值,显示tank
しかし、実行中に問題が発生し、Chromeブラウザで表示できませんでした:
そこで、ChromeブラウザにはCookieに制限があるため、次の理由でオンラインで確認しました。 , Chromeブラウザに与えたCookieは「ローカルデータの設定を許可する」に設定されていますが、それでも機能しません。この記事を読んでいる方、その理由を教えていただけませんか?ありがたい。
エッジブラウザでは次のように表示されます: