2011-09-10 6 views
2

は、だから私は、クッキーを削除するには、このコードを使用して、そしてすでに訪問されている場合、ページがリダイレクト持っています:それは正常に動作しますクッキーの有効期限が間に合わない、これは間違っていますか?

<script language="JavaScript"><!-- 
function Get_Cookie(name) { 
    var start = document.cookie.indexOf(name+"="); 
    var len = start+name.length+1; 
    if ((!start) && (name != document.cookie.substring(0,name.length))) return null; 
    if (start == -1) return null; 
    var end = document.cookie.indexOf(";",len); 
    if (end == -1) end = document.cookie.length; 
    return unescape(document.cookie.substring(len,end)); 
} 

function Set_Cookie(name,value,expires,path,domain,secure) { 
    document.cookie = name + "=" +escape(value) + 
     ((expires) ? ";expires=" + expires.toGMTString() : "") + 
     ((path) ? ";path=" + path : "") + 
     ((domain) ? ";domain=" + domain : "") + 
     ((secure) ? ";secure" : ""); 
} 

function Delete_Cookie(name,path,domain) { 
    if (Get_Cookie(name)) document.cookie = name + "=" + 
     ((path) ? ";path=" + path : "") + 
     ((domain) ? ";domain=" + domain : "") + 
     ";expires=Thu, 01-Jan-1970 00:00:01 GMT"; 
} 

var mainUrl = 'noflash.html'; 
var days = 365; // valid one year from now 

function isCookieEnabled() { 
    if (document.all) return navigator.cookieEnabled; 
    Set_Cookie('testcookie',today.getTime()); 
    var tc = Get_Cookie('testcookie'); 
    Delete_Cookie('testcookie'); 
    return (tc == today.getTime()); 
} 

var today = new Date(); 
var zero_date = new Date(0,0,0); 
today.setTime(today.getTime() - zero_date.getTime()); 

var todays_date = new Date(today.getYear(),today.getMonth(),today.getDate(),0,0,0); 
var expires_date = new Date(todays_date.getTime() + (days * 86400000)); 

var beenHere = Get_Cookie('beenHere'); 
if (beenHere == 'yes') { 
    if (document.images) window.location.replace(mainUrl); 
    else window.location = mainUrl; 
} 
else if (isCookieEnabled()) Set_Cookie('beenHere','yes', expires_date); 
//--></script> 

、私はクッキーをチェックし、それが作成され、後に訪問します私はリダイレクトされますが、問題は有効期限です。ブラウザが閉じたときです。これは何をすべきか(今から1年後)です。

コードが間違っていますか?

答えて

2

".toGMTString()"関数は、クッキー構文に必要な形式の日付文字列を与えません。 「削除」機能のためのあなたのハードコードされた日付が正しいですが、

alert(new Date().toGMTString()) 

を試してみて、あなたが得るものを見ていない - 日付部分の間にはダッシュを。

その他の関連性のないメモ:<script>タグに "language"属性は必要ありません。また、スクリプト本体の周りに古いHTMLコメントが必要ではありません。それは約12年前に止まった。

編集 —もう少し役に立つと、クッキーフレンドリーな日付を得るために、私はたぶん文字列を一緒に入れておきます。

function cookieDate(d) { 
    function d2(n) { return n < 10 ? '0' + n : n; } 
    var days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], 
    months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; 

    return '' + 
    days[d.getUTCDay()] + ', ' + 
    d2(d.getUTCDate()) + '-' + 
    months[d.getUTCMonth()] + '-' + 
    d.getUTCFullYear() + ' ' + 
    d2(d.getUTCHours()) + ':' + 
    d2(d.getUTCMinutes()) + ':' + 
    d2(d.getUTCSeconds()) + ' GMT'; 
} 

「cookieDate(someDate)」を呼び出すと、素敵な文字列を得ることができます。

Here's the jsfiddle.

+0

おかげで、ええ、私はサイトからこのコードを持って、私は本当にJavaScriptを知らない、私はちょうど多分私はいつかそれを学びます、それを必要とします。だから私は 'alert(new Date()。toGMTString())'を間違った形式にしたいと思っていますか? – cb1295

+1

さて、私はそれをイラストレーションとして意味しました。私はより多くの情報で答えを更新します。 – Pointy

+0

ありがとうございました、アラートは、機能が動作していることを確認する良いアイデアでした。今ではクッキーが機能していますが、2081年に期限切れになりました。おそらくそれを変更しようとしましたが、あなたはあなたの仕事をしました。 – cb1295

関連する問題