JavascriptからブラウザのCookieを処理するための制限は正確には何ですか?たとえば、Cookieが有効になっているかどうかを確認できますか?
はい! JavaScriptでのCookieの使用に関するこの優れた記事を読んでください
これが抜粋されたコード例です。
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
createCookie(name,"",-1);
}
そして、それらが有効になっているかどうかをテストすることに関して。私はjldupontの答えが好きです。
あなたはクッキーを書いて読み返そうとします:このようにして、クッキーが有効になっているかどうかがわかります。
navigator.cookieEnabled
を使用できますが、すべてのブラウザでサポートされているかどうかはわかりません。
Cookieの詳細については、 this を確認してください。
JavaScriptを介したCookieの操作に関するquirksmodeに関するすばらしい記事があります: http://www.quirksmode.org/js/cookies.html
たとえば、Cookieが有効になっているかどうかを確認できますか?
はい、でも思ったほど簡単ではありません。 navigator.cookieEnabled
は非常に一般的なフラグであり、どのような状況でCookieを設定できるかを正確にカバーしていません。
たとえば、セッションCookieを許可しても、永続Cookieをブロックすることができます。したがって、ダミーのdocument.cookie
を設定し、document.cookie
を読み返して、Cookieセットが成功したかどうかを確認することにより、Cookieセットが成功するかどうかを実際に知ることはできません。
多くのブラウザでは、永続的なCookieが無効になっていると、永続的なCookieがセッションCookieにダウングレードされます。しかし、IEではなく、単にそれをブロックします。永続CookieとセッションCookieの両方をdocument.cookie
に設定し、どちらが存続するかを確認することで、それを検出することができます。
W3Schools JavaScript Cookies コードにはバグがあります。関数setCookieの次の行:
exdate.setDate(exdate.getDate()+expiredays);
JavaScriptの日付オブジェクトのプロパティ:
getDate() - Returns the day of the month (from 1-31)
...
getTime() - Returns the number of milliseconds since midnight Jan 1, 1970
...
getDate() plus the number of days is not going to work. I think it should be something like this:
expire = expiredays * 1000 * 60 * 60 * 24; // convert to milliseconds
var exdate = new Date( today.getTime() + (expire) );
TechPatterns.comのCookieライブラリ Javascript Cookie Script Get Cookie、Set Cookie、Delete Cookie Functions より適切に機能します(Googleの結果で1位が常に最良であるとは限りません)。
IE8の両方のページのコードをテストしたところ、最初のページでCookieの有効期限が2038年1月1日午前1時でした。 2番目の例のコードでは、予想どおり、Cookieの有効期限をテスト時から正確に1日に設定しています。