2016-03-20 23 views
1

FirefoxとSafariでテストしましたが、次の両方の行を試しました。それぞれがクッキーを設定しますが、どちらの方法でもブラウザを閉じた後(そして再オープンしても)クッキーが期限切れになりません。ブラウザのクッキー情報によると、「テスト」の有効期限が「セッションの終了時」に設定されていますが、発生しません。ブラウザが終了したときに期限切れになるようにjsで設定されたCookie

これに関するいくつかの類似した投稿(例:When does a cookie with expiration time 'At end of session' expire?)がありますが、特に私が行っているようなjavascriptでCookieを設定することは何も助けられていません。 "テスト= 1; = 0を満了し、パス= /"

//は、ブラウザが

document.cookie =を閉じた後に期限切れに失敗しました。

//は、ブラウザが

document.cookie =閉じた後に期限切れに失敗し、 "テスト= 1;パス= /";

+0

これは興味深いことです。おそらく、これはいくつかのコンテンツセキュリティ設定によるものです。たとえば、Cookieが最初にサーバーレスポンスヘッダーに設定され、 'httpOnly'フラグが設定されていたとします。サーバーがクッキーヘッダーを送信していますか? – lxe

+0

@lxeそれは実際にはかなり愚かであることが分かった。私は、あなたがMacでブラウザを「閉じる」と、ブラウザプロセスがまだ生きていることを認識していませんでした。ブラウザを明示的に終了する必要があります。私がそれをしたら、クッキーはなくなった。 –

答えて

0

期限切れタグは、UTC-Datestringを取得したいとします。あなたはちょうど私が書いたいくつかの単純な機能を使用することができます:あなたはremoveCookie()関数を使用している場合は、現在のページが残っているとき

setCookie = function(attrib, value, exp_days) { 
    var dt = new Date(); 
    dt.setTime(dt.getTime() + (exp_days*86400000)); // Convert days to ms 
    document.cookie = attrib + "=" + value + "; expires=" + dt.toUTCString(); // add attrib=value to the cookie and set an expiration date 
} 

getCookie = function(attrib){ 
    var split_cookie = document.cookie.split("; "); 
    attrib+="="; 
    for(var i=0; i<split_cookie.length; i++) 
    if(~split_cookie[i].indexOf(attrib)) // if the attribute is somewhere in the cookie string 
    // im using an ugly bitflip operator here, it could as well be an if(...!=-1) 
     return split_cookie[i].substring(attrib.length + split_cookie[i].indexOf(attrib),split_cookie[i].length); 
    return ""; 
} 

removeCookie = function(attrib){ 
    setCookie(attrib, "", -1); 
} 

を、ATTRIBの値が削除されます。

+0

ありがとうございます。残念ながら同じ結果。ブラウザを閉じたときに期限切れにしたい場合は、exp_daysを正確に設定する必要がありますか?私は0、1、-1を試して、それを空のままにしました。 removeCookie関数については、明示的に何かを削除する必要はありません。ブラウザを閉じても自動的に「削除」する必要はありませんか? 1つは、ブラウザを閉じた後でも、プロセスを実行したままにしておくということです。一度私はそのプロセスを殺すだけで、私はクッキーが最終的に失効したのを見つけるか?だから、問題は - セッション/プロセスの原因となっているブラウザの設定はありますか? –

+0

更新:開いているプロセスは、私がMacを使用していたためで、ブラウザを閉じた後に開いたままにしていました。だから私の唯一の残りの質問は、ブラウザが終了したときに期限切れにしたい場合は、exp_daysを正確に設定する必要がありますか?私は31572500の作品のような数字に気付きますが、なぜですか?明日の期限切れを意味する1の場合、セッションの終了時ではなく31572500日後に31572500が期限切れになることはありませんか? –

+0

Cookieは、その値がfalse( "")または期限切れの値に達したときに削除されます。 removeCookieはこの両方を行うので、ページをリロードするときにクッキーが消えてしまいます(-1は昨日を意味するので、渡されます)。なぜ31572500が動作するのかわからないのですが、オーバーフローしていないと、日付)。 – Chemistree

0

私は、Macでブラウザを閉じると、ブラウザプロセスがまだ生きていることに気付きませんでした。ブラウザを明示的に終了する必要があります。私がそれをしたら、クッキーはなくなった。

関連する問題