web-dev-qa-db-ja.com

JavaScriptからCookieを変更または追加できますか?

JavascriptからブラウザのCookieを処理するための制限は正確には何ですか?たとえば、Cookieが有効になっているかどうかを確認できますか?

14
user207414

はい! 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の答えが好きです。

40
jessegavin

あなたはクッキーを書いて読み返そうとします:このようにして、クッキーが有効になっているかどうかがわかります。

7
jldupont

navigator.cookieEnabledを使用できますが、すべてのブラウザでサポートされているかどうかはわかりません。

Cookieの詳細については、 this を確認してください。

4
Soufiane Hassou

JavaScriptを介したCookieの操作に関するquirksmodeに関するすばらしい記事があります: http://www.quirksmode.org/js/cookies.html

1
Mario Fink

たとえば、Cookieが有効になっているかどうかを確認できますか?

はい、でも思ったほど簡単ではありません。 navigator.cookieEnabledは非常に一般的なフラグであり、どのような状況でCookieを設定できるかを正確にカバーしていません。

たとえば、セッションCookieを許可しても、永続Cookieをブロックすることができます。したがって、ダミーのdocument.cookieを設定し、document.cookieを読み返して、Cookieセットが成功したかどうかを確認することにより、Cookieセットが成功するかどうかを実際に知ることはできません。

多くのブラウザでは、永続的なCookieが無効になっていると、永続的なCookieがセッションCookieにダウングレードされます。しかし、IEではなく、単にそれをブロックします。永続CookieとセッションCookieの両方をdocument.cookieに設定し、どちらが存続するかを確認することで、それを検出することができます。

1
bobince

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日に設定しています。

0
Bratch