2009-05-12 10 views
1

가능한 중복 : 나는 쿠키를 확인하고 20 분 이전인지 여부를 말할 필요로하는 프로젝트를 진행하고
What is the “best” way to get and set a single cookie value using JavaScriptJavaScript로 쿠키를 처리하는 방법은 무엇입니까?

. 그래서 나는 이렇게 한 번 코드를 작성했습니다. 이것은 붙여 넣은 자바 스크립트 코드입니다.

function checkcookie() 
{ 
    var difftime= getcookie(); 
    // further operation comes here 
} 

var cookieminutes; 

function getcookie() 
{ 
    var start = document.cookie.indexOf("expires"); 
    var cookiedate; 

    if(start==-1) 
    { 
     cookiedate = new Date(); 
     document.write("Start equal to -1"); 
     document.cookie="expires="+cookiedate+",path=0,domain=0"; 
     cookieminutes= cookiedate.getMinutes(); 
    } 
    else 
    { 
     document.write("Start not equal to -1"); 

     var date = new Date(); 
     var minutes = date.getMinutes(); 

     document.write("The difference is "+minutes); 
     document.write("<br />Cookie minutes is "+cookieminutes); 
     return (minutes-cookieminutes); 

    } 
} 

getcookie에서 변수 cookieminutes가 정의되지 않은 상태로 제공됩니다. 그러나 나는 그것이 글로벌 변수이기 때문에 그것이 가치를 가져야한다는 것을 알고있다.

아무에게도 해결책을 말해 줄 수 있습니까?

+0

그것의 getCookie 주어진 페이지로드에서 처음 호출되는 경우처럼 보이는, 그리고 쿠키가 존재 cookieminutes가 설정되지 않습니다. –

답변

-4

전역 변수 (일반적으로 나쁜 디자인)를 사용하여이를 명시 적으로 창에 설정하고 액세스하십시오. 예 :

window.cookieminutes = cookiedate.getMinutes(); 

이상 :

document.write("Cookie minutes is "+window.cookieminutes); 

그리고 나는 내 댓글 말했다 것처럼 var cookieminutes;

드롭, 그것의 getCookie가 주어진 페이지에 처음으로 호출되는 경우처럼 보인다 load이고 쿠키가 존재하면 (start! = -1), cookieminutes는 설정되지 않습니다. 정의되지 않은 변수를 사용하지 않도록해야합니다.

+0

이 관점을 지원하는 링크를 제공 할 수 있습니까? 나는 전에 이것을 보지 못했습니다. –

+0

어떤 관점을 언급하고 있습니까? 전역 변수는 잘 알려진 코드 냄새입니다. –

+0

명시 적으로 윈도우 객체를 사용하여 (윈도우를 명시 적으로 사용하지 않고) 전역 객체를 설정하거나 가져 오는 것이 전역 객체 사용의 관점이라고 가정합니다. – stpe

1

if 문의 맨 윗부분에 cookieminutes 값만 설정하면 else 섹션의 모든 참조는 null이됩니다.

이 시도 : (! 시작 = -1)

function getcookie() 
{ 
    var start = document.cookie.indexOf("expires"); 
    var cookiedate; 

    cookiedate = new Date(); 
    cookieminutes = cookiedate.getMinutes(); 

    if(start==-1) 
    {  
     document.write("Start equal to -1"); 
     document.cookie="expires="+cookiedate+",path=0,domain=0";  
    } 
    else 
    { 
     document.write("Start not equal to -1"); 

     var date = new Date(); 
     var minutes = date.getMinutes(); 

     document.write("The difference is "+minutes); 
     document.write("<br />Cookie minutes is "+cookieminutes); 
     return (minutes-cookieminutes); 

    } 
} 
+0

우르 코드가 작동 중입니다 ...하지만 그 cookieminutes 및 분을 사용하면 둘 다 같은 가치가됩니다. 나는 나의 프로젝트 요구 때문에 2 사이에 20 분의 differnece를 얻어야한다. 그래서 u pls 다른 솔루션을 게시 할 수 있습니다 .. 감사합니다 .. – Chaithra

+0

나는 20 분에 대한 참조를 이해하지 않습니다. jim0thy와 내가 말했듯이 원래 코드는 설정하기 전에 cookieminutes를 사용하고있었습니다. 쿠키를 읽으면 제대로 초기화해야합니다. 쿠키를 읽는 방법을 모른다면 http://www.quirksmode.org/js/cookies.html –

+0

을 확인하십시오. 조금만 살펴본 후에 쿠키의 만료일이 쓰기 전용 인 것으로 보입니다 그래서 JS는 그것을 읽을 수 없다. document.cookie.indexOf ("expires")는 쿠키 이름이 "만료"되고 만료 날짜를 검색하지 않습니다. 두 번째 쿠키를 만들고 그 쿠키의 값을 첫 번째 쿠키의 만료 날짜로 설정하는 것이 유일한 방법입니다. 죄송합니다. – jim0thy

관련 문제