2011-09-10 2 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

덕분에, 그래 나는 사이트에서이 코드를 가지고, 난 정말 자바 스크립트 몰라, 난 그냥 어쩌면 내가 언젠가 그것을 배울 것입니다, 그것을해야합니다. 그래서 내가 지금 잘못된 형식을 가지고있는'alert (new Date(). toGMTString())'을 어디에 두길 원합니까? – cb1295

+1

글쎄, 나는 이것을 일러스트레이션으로 의미했다. 더 많은 정보로 답변을 업데이트하겠습니다. – Pointy

+0

도착! 고마워요, 무리는, 기능이 작동하고 있는지 확인하는 좋은 생각이었습니다. 쿠키가 작동 중입니다. 2081 년에 만료되었으므로 아마도 변경 될 것입니다.하지만 고맙습니다. – cb1295