[php] setcookie("test","abcdef",time()..

gyxor의 이미지

setcookie("test", "abcdef" ,time()+ 3600, '/');
하게 되면.. cookie 폴더에 사이트주소이름으로 쿠기가 생성되고
그안에 test abcdef 의 내용등이 들어가 있는것을 확인해볼수 있습니다.

첫째,
setcookie("test", "abcdef" ,0, '/');
이렇게 유지시간을 time()+시간 .. 형식이 아닌
0이나 그 이상 3600... 이런식으로 정해주면 쿠키파일을 볼 수 가없습니다.
그이유는 time(null) 값 현재시간값이 (출력해보면)
1062049543이라서 0또는 3600이란 값은
현재 시간보다 더 이전... 마이너스 시간이
되기 때문에..그런것인가요?

둘째,
setcookie("test", "abcdef" ,time()+1, '/');
만약 로 하면 쿠키파일이 생성되는것을 볼 수 있습니다. 3600이 한시간이니
1은 1초인데요.. 쿠키파일은 안사라집니다.
왜 그런지 알고싶습니다. 분명히 쿠키유지시간(생명)이라고 되어있었습니다.

셋째,
사라지는 기준점이 사이트가 열린후(쿠키생성후) 1초인지.. 아니면 브라우져를 끄거나 다른 사이트로 넘어간후 1초인지..
궁금합니다.

위 세가지 내용 답변부탁드립니다.

afsadfsaf의 이미지

gyxor wrote:
첫째,
setcookie("test", "abcdef" ,0, '/');
이렇게 유지시간을 time()+시간 .. 형식이 아닌
0이나 그 이상 3600... 이런식으로 정해주면 쿠키파일을 볼 수 가없습니다.
그이유는 time(null) 값 현재시간값이 (출력해보면)
1062049543이라서 0또는 3600이란 값은
현재 시간보다 더 이전... 마이너스 시간이
되기 때문에..그런것인가요?

숫자가 0인 쿠키는 메모리에만 남습니다.

gyxor wrote:

둘째,
setcookie("test", "abcdef" ,time()+1, '/');
만약 로 하면 쿠키파일이 생성되는것을 볼 수 있습니다. 3600이 한시간이니
1은 1초인데요.. 쿠키파일은 안사라집니다.
왜 그런지 알고싶습니다. 분명히 쿠키유지시간(생명)이라고 되어있었습니다.

잘 기억이 안나는데 유지시간이란건 말 그대로 유지시간이지
파일을 지우는건 아닌듯 하네요..

그러니까 "유효" 가 유지되는 시간 말이죠..

gyxor wrote:

셋째,
사라지는 기준점이 사이트가 열린후(쿠키생성후) 1초인지.. 아니면 브라우져를 끄거나 다른 사이트로 넘어간후 1초인지..
궁금합니다.

브라우져 구현에 따라 다르겠지만, 보통 브라우져가 생성한 직후
타이머를 돌릴듯 합니다...

위 세가지 내용 답변부탁드립니다.

L-System

gyxor의 이미지

setcookie의 유지시간을 time()+.. 형식이 아닌것으로 했을경우에
현재시간보다 적을 경우엔 메모리에 생성이 되므로 cookie파일을 아예
만들지 않는다는 말씀이신가요?
메모리에서 쿠키를 다루는것까지 살펴보는것은 차치하더라도...
쿠키가 생성되는 경우만 놓고서 생각해 보기로 했습니다.
time()+1 이라면 1초동안 유지가 된다는 의미로 책에는 쓰여있습니다.

하지만 제가 이것저것 해본 결론 부터 말씀을 드리자면
time()+1 이던 time()+360000 이던 같다는 것입니다.

왜 그런 생각을 했나면요..

function UpdateCookie(){

	global $NOTICE_OPENED, $no;
	
	// 페이지 목록 분리
	$opened = explode("|", $NOTICE_OPENED);
	if ( in_array($no, $opened) ) return 0;
	                                                                                      
	// 처음 열리는 페이지이면 쿠키에 페이지 추가
	setcookie('NOTICE_OPENED', $NOTICE_OPENED.'|'.$no , time()+1, '/');
	return 1;
}

이 코드는 보시면 ..
이것은 게시판에서 한번읽은 글의 번호를 쿠키에 기록하여 카운트가 한없이
올라가는것을 방지하는 function 입니다.
NOTICE_OPENED 라는 이름으로 쿠키를 생성합니다.
쿠키파일에서 번호를 찾지 못하면 새로 쿠키 기록 추가 하는 알고리즘인데요..
이것대로 실제로 게시판글을 처음 읽으면 카운트가 1올라가지만
두번째부터는 더이상 올라가지 않습니다.
쿠키내용을 봐도
|1|2|3... 이형식으로 번호가 추가 된것을 볼 수 가 있습니다.
문제는 쿠키를 중간에 지우고 새로고침을 해도
번호는 증가되지 않습니다. (처음엔 당연히 증가되겠거니 생각했습니다.)

혹시 쿠키의 내용이 메모리에 기억되기 때문인가요?
그렇다면 유지시간을 time(0)+,,, 형식이 아니라 그냥 0으로 셋팅할 경우의
차이가..
파일이 생성되지 않거나..
파일이 생성되서 기록이 남는것 말고는 다른차이가 없어보입니다.
또한 유지시간의 개념이 왜 필요한지도 모르겠습니다.
단지 생성 또는 비생성 두가지로 나눠서 생각해도 될거 같았는데요..

답변부탁드립니다.

추가내용 : 쿠키를 지우고 읽었던 글을 다시 읽었을때 조회수가 안올라가는
것을 다시한번 확인한후... 다른 읽지 않은 글을 읽어서 쿠키를 생성한후..
내용을 살펴보니 전에 읽었던 글의 번호가 모조리 추가가 되어있습니다.
이것은 쿠키 내용은 유지시간에 관계없이..
메모리에 들어있는것을 서버가 참조한다는것..이 더 확실해 지는거 같은데요..

afsadfsaf의 이미지

음 제가 쿠키에대해 잘 모르기때매..
자세한건 쿠키 공부하실때 문서에 더 잘 나와있을겁니다;

그래도 일단 아는대로 말해보도록 하지요 -_-a

일단 쿠키가 메모리에 한번만 저장하고 계속 쓰느냐 아니면,
새로 매번 읽는가는 브라우져 구현에 따라 다르겠죠?

쿠키가 필요할때마다 하드에서 읽어오는 브라우져라면..(물론 이렇게 구현하는
브라우져는 없겠지만)쿠키를 지우고 새로고침하면 글 조회수가 올라갈겁니다.
하지만 미리 읽어놓은 쿠키는 당연히 아니겠죠. 소요시간이 지나면 메모리에서
해제하던가 지우던가 뭐 그렇게 하겠죠.

파일에 저장하는 이유는 나중에 브라우져 다시켰을때.. 또 쓸라구...;;
세이브 파일입니다;

자동 로그인등을 바로 이렇게 구현하며, 유지시간은 이 유지시간이 지나면
쿠키를 사용할 수 없게 만드는 것입니다.

쿠키가 하드에서 지워지는 시점은 브라우져의 가비지 콜렉션(쓸모없는거 지우기)
루틴에따라 달라집니다.

결국 쿠키가 하드에서 물리적으로 지워지는 시간과 유지시간은 무관하다는
말이죠..(물론, 지우면 소요시간이 그때로 끝나는거죠-_-;;)

소요시간 0은 시간이 0이 아니라, "브라우저가 살아있을때 까지만 쿠키를
살려라" 라는걸로 알고있습니다.(제가 잘 몰라서 틀렸을수 있습니다.)

쿠키관련 문서를 어디서 본거같은데.. 너무 오래되서 기억이..
자세한 내용은 검색엔진 찾아보시면 더 많이 나올거에요..

그럼..;

L-System

gyxor의 이미지

Quote:

쿠키가 하드에서 지워지는 시점은 브라우져의 가비지 콜렉션
(쓸모없는거 지우기) 루틴에따라 달라집니다.

유지시간과 파일삭제가 무관하다는것은 알겠습니다.
쿠키를 삭제하고 브라우져 종료후에 다시 조회를 하면 카운트가 올라갑니다.
메모리에 쿠키가 저장되는것도 브라우져가 켜져있는 동안 인거 같습니다.

Quote:

자동 로그인등을 바로 이렇게 구현하며, 유지시간은 이 유지시간이 지나면
쿠키를 사용할 수 없게 만드는 것입니다.

이 내용에서 유지시간이 정말 쿠키를 사용하지 못하도록 만든다면..
유지시간을 time()+1 즉, 1초로 잡아놓고..서..
브라우져를 종료 시키고 나서 다시 조회를 하면 카운트가 올라가야 합니다.
물론 1초는 훨씬 지난 상태에서 다시 브라우져를 작동시킵니다.
(만약 쿠키가 브라우져 종료후에도 메모리에 남는 다면 쿠키파일을 지우고서
조회 했을때 카운트가 올라가지 말아야 합니다. 그러나 올라갑니다.)

하지만 카운트는 올라가지 않습니다. 메모리에 있는 쿠키가 아니라
쿠키(저장된 파일)이 작동을 하고 있는것 아닌가요?..

다시말해 유지시간이 쿠키를 사용할 수 없게 만든다는것!!! [입증이 안됩니다.]

이것이 도대체 어떤 의미인지 모르겠습니다.

유지시간을 조절가능하도록 해놓은 이유 모르겠습니다.

답변부탁드립니다.

ai의 이미지

쿠키 유지시간이 어느 정도 이하로는 작아지지 않는 것으로 알고 있습니다. php 뿐만 아니라 perl-cgi 에서도 마찬가지였는데, 문서를 통해 확인한 내용이 아니라 장담은 못하겠네요. 한 3~4 년 정도 전에 테스트 했으므로 그간에 해당 사항이 변경되었을 수도 있구요.

아무튼 저도 1 초 정도의 짧은 쿠키 유지 시간을 세트해 보려고 했었는데, 도저히 수십~수백 초 이내로는 줄어들지 않는겁니다. (정확한 수치는 기억이 잘.. 몇 분 정도였던 것 같습니다.) 그냥 그러려니 하고 넘겨버렸기 때문에 당시의 제 클라이언트 환경에 국한된 문제일 수도 있겠네요. 참고하셔서 수백 초 정도의 유지시간을 주고 테스트 해 보시기 바랍니다.

War doesnt determine whos right, just whos left.

gyxor의 이미지

ai wrote:
쿠키 유지시간이 어느 정도 이하로는 작아지지 않는 것으로 알고 있습니다. php 뿐만 아니라 perl-cgi 에서도 마찬가지였는데, 문서를 통해 확인한 내용이 아니라 장담은 못하겠네요. 한 3~4 년 정도 전에 테스트 했으므로 그간에 해당 사항이 변경되었을 수도 있구요.

아무튼 저도 1 초 정도의 짧은 쿠키 유지 시간을 세트해 보려고 했었는데, 도저히 수십~수백 초 이내로는 줄어들지 않는겁니다. (정확한 수치는 기억이 잘.. 몇 분 정도였던 것 같습니다.) 그냥 그러려니 하고 넘겨버렸기 때문에 당시의 제 클라이언트 환경에 국한된 문제일 수도 있겠네요. 참고하셔서 수백 초 정도의 유지시간을 주고 테스트 해 보시기 바랍니다.


그렇군요..
시간이 10여분 흐른뒤 확인해보니..
쿠키 파일은 그대로 있지만(내용도 그대로)..
조회수가 올라가는것을 확인할수 있었습니다.

답변해주신 분들께 감사드립니다. 꾸벅!

gyxor의 이미지

ai wrote:
쿠키 유지시간이 어느 정도 이하로는 작아지지 않는 것으로 알고 있습니다. php 뿐만 아니라 perl-cgi 에서도 마찬가지였는데, 문서를 통해 확인한 내용이 아니라 장담은 못하겠네요. 한 3~4 년 정도 전에 테스트 했으므로 그간에 해당 사항이 변경되었을 수도 있구요.

아무튼 저도 1 초 정도의 짧은 쿠키 유지 시간을 세트해 보려고 했었는데, 도저히 수십~수백 초 이내로는 줄어들지 않는겁니다. (정확한 수치는 기억이 잘.. 몇 분 정도였던 것 같습니다.) 그냥 그러려니 하고 넘겨버렸기 때문에 당시의 제 클라이언트 환경에 국한된 문제일 수도 있겠네요. 참고하셔서 수백 초 정도의 유지시간을 주고 테스트 해 보시기 바랍니다.

사실 이내용을가지고 이렇게 저도 결론을 내렸었습니다.
디폴트시간이(?) 있을것이다..
그런데 여러시스템에서 해본결과 수백초이내로 줄어들지 않는것..
은 서버와 클라이언트 컴터의 시간이 서로 다르기 때문에 일어나는 현상이
아닌가요?
컴퓨터 마다 time() 값이 다르다면 지금까지 설명하지 못했던 불규칙한
현상들이 모두 설명가능할거 같습니다.
답변부탁드립니다.

ai의 이미지

gyxor wrote:
그런데 여러시스템에서 해본결과 수백초이내로 줄어들지 않는것..
은 서버와 클라이언트 컴터의 시간이 서로 다르기 때문에 일어나는 현상이
아닌가요?
컴퓨터 마다 time() 값이 다르다면 지금까지 설명하지 못했던 불규칙한
현상들이 모두 설명가능할거 같습니다.
답변부탁드립니다.

글쎄요. 그런 현상이 있다는 것을 알고 난 후에 쿠키를 사용해서 크리티컬한 작업을 하지 않는 쪽으로 방향을 바꾸었기 때문에 정확히 어떤 원인에 의한 것인지 고민하는 일은 하지 않았습니다. 다만 쿠키는 asp 의 서버변수나 php 의 세션변수와 다르게 클라이언트에 의존하는 것으로 알고 있습니다. 따라서

$ cat setcookie.php
<?   
  setcookie( "testcookie", "1234", time()+300, "/" );
?>
$ dog http://localhost/setcookie.php
HTTP/1.1 200 OK
Date: Wed, 03 Sep 2003 14:24:22 GMT
Server: Apache-AdvancedExtranetServer
P3P: CP='CAO PSA CONi OTR OUR DEM ONL'
X-Powered-By: PHP/4.2.3
X-Accelerated-By: PHPA/1.3.2
Set-Cookie: testcookie=1234; expires=Wed, 03-Sep-03 14:29:22 GMT; path=/
Connection: close
Content-Type: text/html; charset=euc-kr
$

쿠키를 300 초 유지하는 것으로 세트하는 것은 분명한데, 그 기준 시간을 어떻게 두는지는 클라이언트 구현에 따라 다를 것 같습니다. 이를테면 위에서 Wed, 03-Sep-03 14:29:22 GMT 파기되는 것으로 세트된 쿠키가 그 시간을 서버 기준으로 할지 클라이언트 기준으로 할지는 모른다는 것입니다. (http 로 접근할 때 서버의 시간을 알 수 있습니다.)

따라서 클라이언트 소스코드를 들여다 보지 않는 이상은 기준시간을 로컬과 서버 어느편에 둘 것인지, 또는 쿠키를 파일로 생성할 것인지 아닌지의 여부를 알기 어렵다고 생각합니다. 쿠키에 대해 표준안이 있는지는 모르겠습니다만, 이것 저것 떠나서 생각한다면 아무래도 클라이언트가 편리하다는 방법은 로컬의 시간을 기준으로 처리하는 것이라고 보입니다. 그래서 말씀하신 추측도 설득력이 있는 것 같습니다.

한편 php 사용하신다면 꼭 쿠키를 고집하실 이유는 없지 않나요? 세션을 등록하고 필요한 페이지에서마다 불러오는 편이 코딩하기에도 편리한 것 같습니다만.. 게다가 쿠키에 넣은 내용은 파일로 생성여부에 무관하게 언제나 클라이언트는 그 내용을 볼 수 있습니다. ie 라면 주소창에

javascript:document.write(document.cookie) 라는 형식으로 확인이 가능하기 때문에 프로그래머 입장에서는 별로 달갑지 않죠. 쿠키를 꼭 사용하신다면 유효기간을 수 시간 이상으로 두어도 괜찮은 항목으로, 그리고 그 내용이 누구에게나 알려져도 무관한 항목으로 제한하시는 편이 어떨까 합니다.

War doesnt determine whos right, just whos left.

gyxor의 이미지

적어도 php의 경우 쿠키의 생성은 서버시간에 맞추고
소멸되는 타임은 클라이언트시간에 비교를 하니까
이런 사소한 문제가 생기는군요..
이사항은 기준이 뭐냐에 따라 다르고 표준(?)은 없나보군요..
ai님 덕분에 많은 도움이 되었습니다.

정말 감사합니다.

ai의 이미지

gyxor wrote:
적어도 php의 경우 쿠키의 생성은 서버시간에 맞추고
소멸되는 타임은 클라이언트시간에 비교를 하니까
이런 사소한 문제가 생기는군요..
이사항은 기준이 뭐냐에 따라 다르고 표준(?)은 없나보군요..
ai님 덕분에 많은 도움이 되었습니다.

정말 감사합니다.


표준이 없다라는 뜻은 아니었습니다만.. rfc2109 에 쿠키에 대한 내용이 나옵니다. 단지 쿠키를 어떤 방법으로 만료하는지에 대해 찾아보지 않았다는 정도로 이해해 주세요.

War doesnt determine whos right, just whos left.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.