Cookie관련 질문입니다.

syjeon의 이미지

난감한 일이 하나 생겨서
Cookie관련 작업을 하고 있는데
M$ 인터넷 익스플로어에서 창이 닫혀질때
항상 비우는 Cookie폴더가 있나요?
즉 익스플로어가 떠있을때는 사용하다가
요놈이 어떤 일로든 죽을때는 clear하는 쿠키가 없는가 해서
도움을 구합니다.

익명 사용자의 이미지

흐음 상황을 봐서는 다른해결책을 찾는것이 좋을듯 합니다..

IE에 의존적으로 진행이된다면 그런기능이 있다하더라도..

100% 신뢰할수 없다면.. 진행하기 어려운 부분같습니다..

IE가 죽거나 할때도있을텐데.. 임시값으로만 사용하실거라면..

매번 값을 넘겨받는것이 좋을듯합니다.. 세션정보기반으로

서버쪽에서 담아두시던가요...

소타의 이미지

휘발성 쿠키를 말씀하시는 듯 한데..
쿠키의 expire 값을 0 으로 주시면 파일로 저장되지 않고 메모리에만 올라와 있게 됩니다. 익스가 어떤 경우로 죽으면 없어지죠..

syjeon의 이미지

자세한 상황을 덧붙여 말씀드리자면.
현재 쿠키는 expired time을 설정(60분)한 상태에서 동작하고
있습니다. 즉 login하여 접속이되면 setcookie를 통해 client와
서버에 동시 셋팅이 됩니다. 그후 페이지내에 링크를 통해 다음
페이지를 불러들였을때 그 쿠키값을 통해 인증하여 사용자가 볼수
있게끔 구성이 되어있습니다. 즉 쿠키를 통해서 스텝스텝진행될떄
마다 갱신된 쿠키를 계속 resetting하여 다른페이지와의 인증을 하는 것
이죠. 그런데 발생된 문제는 익스플로어 창을 닫더라도 60분이라는
시간이 지나야만 cookie가 사라진단 말씀입니다. 5분정도로 줄여도
되지만 이에 대한 궁극적인 해결책은 아닌것 같구요(왜냐하면 웹에서
뭔가를 쓰는 도중에 5분이라는 시간이 지나게 되면 expire되어서 접
속이 끊어져 버려 다음페이지를 불러 들였을 때에는 튕겨나가는 현상이
발생할 것이라는 판단이 들어서 입니다.)

휘발성쿠키도 많이 생각을 해보았지만 이는 login페이지 이후에 다른 CGI
등들이 login page에서 생성한 쿠키인증을 통해 페이지 첫부분에 쿠키값
이 동일하면 페이지를 보여주고 서버/클라이언트 모두의 cookie값을
resetting하여 보여주는데 이 값을 CGI가 로딩될때마다 체크하려면
post방식을 쓰는 지금 Server쪽 파일이 필요하기 때문입니다.

설명이 어려운지 모르겠으나 한수 부탁드립니다.

------------------Signature
바늘속에서 사막찾기 0.o

익명 사용자의 이미지

쿠키값에.. 중요한정보를 담는것은 위험합니다..

다시보아도 쿠키사용은 적절치않은듯합니다..

고려해보시길..

syjeon의 이미지

-.- 손님이라서 어떤 호칭을 붙이기가 애매하군요.
말씀하신대로 그렇다면 Session정보를 통한 web
page들의 인증과정을 Cookie이외의 다른 방법으로
할 수 있는 방법은 어떤 것이 있는지 간략하게라도
소개를 해주시면 더할나위 없을 것 같습니다.

------------------Signature
바늘속에서 사막찾기 0.o

nohmad의 이미지

대부분의 웹프레임웍의 세션 라이브러리들 역시 cookie를 기반으로 합니다. 클라이언트 cookie에는 하나의 유일한 키만 저장해놓고, 이 키를 가지고 서버의 영속저장공간(DB나 파일시스템)에 필요한 값들을 읽고 쓰는 방식으로 구현합니다.

cookie를 쓰지 않고도 가능은 합니다만 실제로 효용성이 없습니다. 예를 들면 세션 정보 유지가 필요한 모든 웹 페이지들의 링크나 form 등으로 주소를 전달하는 부분에서 주소 문자열을 실시간으로 치환해서 세션정보를 영속시키는 방법이 있습니다. 요즘도 이렇게 개발하는 곳이 있는지는 모르겠네요. PHP에는 아직도 이 옵션이 사용가능합니다.

uleech의 이미지

대용량이 아니라면 세션을 *sql db에 저장하는 것은
어떨런지요? php로 mysql을 이용해서 세션 처리하는
예제는 많이 있는 걸로 알고 있습니다만은..
대용량이라면 오버헤드가 심하므로 비추입니다.

syjeon의 이미지

간단하게 줄여 질문하면
현재 쿠키를 통한 인증은 하고 있습니다만,
브라우져를 닫게 되면 인증을 깨고 싶다는
말씀입니다. 즉 각 페이지의 쿠키체크는
되어있다는 이야기 입니다.

그리고 sql은 올리지못하는상황입니다. 왜냐면
embedded system이니까요..

------------------Signature
바늘속에서 사막찾기 0.o

익명 사용자의 이미지

흐흠 손님으로왔으니 계속 손님으로 가겠습니다..

중요한 데이터를 쿠키로 저장한다의 의미는 쿠키를 사용하지 않는다는

의미는 아니었습니다.. 그리고 혹시 서버사이드가 embedded system

인가요? 아니라고 이야기한다면..

기본 서버사이드에서는 세션키만 발급합니다..

그리고 그사용자는 세션키만으로 돌아다니는것이지요..

새로운 정보나 중요한 데이터가 있다면 해당 세션키에 대해 서브데이터로 갖는것입니다..

-- 세선 ID[192837912873] --
아이디: 거시기..
정보A : ??????
정보B : ??????
------------------------------------

이런식으로 관리하는걸 이야기하는건데요 Java Beans처럼 말이죠..

서버사이드가 embedded system고 심플한 http 구성이라면

다시한번 고민해봐야겠네요..

제가 보안에 문제를 말씀드린건 예전 모사이트보니까..

결제시 데이터를 쿠키로 하는데 쿠키값을보니..

아이디: xXXX 제품번호: XXXX 등으로 하더군요.. 결제시..

포인트정보등 아이디값을 바까서 결재가 가능했다는... ㅡㅡa

정보자체를 암호화기반으로 해서 보안문제를 해결한다면..

다른방법으로 가능할것같기도합니다만.. 일단은 서버가 임베디드라고하신건지..

궁금합니당..

syjeon의 이미지

환경자체를 말씀드려야 할것 같습니다.
embedded System의 Configuration을 웹을 기반으로 작성하였습니다. 이를 통한 access시 인증을 위해서 Server에서 Cookie를 첫 로그인 Page에서 발급합니다. 기본적인 셋팅값은 name값과 expired time id값입니다. 각 페이지를 돌아다닐때 각각의 page는 Server에 저장된 Cookie값과 Client에 저장된 비교값을 이용하여 둘이 일치된다면 Cookie값을 resetting하게 됩니다. 물론 이때 expire time도 갱신하게 되죠.

Embedded System에서 사용하는 Web Server는
tiny-httpd를 사용하고 있습니다.

어떤 방법이 있을런지요.

------------------Signature
바늘속에서 사막찾기 0.o

소타의 이미지

휘발성 쿠키를 사용하시되.. 쿠키값 내부에 expire 값을 따로 저장하심이 좋을 듯 합니다.
쿠키값 항목이 하나 늘어나긴 하지만 마지막 쿠키 갱신 시간을 넣어놓고, 마지막 쿠키 갱신 시간이 1시간 전일 때 쿠키를 해제해버리면 두마리 토끼를 다 잡을 수 있을 듯 합니다.

syjeon의 이미지

(질문자입니다.)
1,2,3,4,5 즉 5개의 page와 login page가 있다고 예를 들어보겠습니다.
login~1~2~3~4~5 페이지 모두 순서대로 연결이 되어있다고 칩니다.

먼저 사용자는 IE를 통해 http://192.168.0.100이라는 web서버로 접속을 시도합니다.
이때 서버에서는 login.cgi라는 페이지를 띄워줍니다.
이때 이 CGI는 ID/passwd를 입력하여 인증하는 과정이 있습니다.
맞게 입력된 ID/Passwd를 입력받은후 Server/Client의 양쪽에 Cookie를 setting합니다.
이때 Server의 /tmp안에 저장이 됩니다.
Cookie의 항목은 id와 expire time,path등이 설정됩니다.
그후 1번 페이지를 보여줍니다.
사용자가 1번페이지에서 2번페이지로 링크를 따라 브라우징하게 됩니다.
그러면 2번 페이지가 로딩될 것인데 이때 이전에 인증된 사용자인지를 알기위해
Client에 셋팅된 쿠키값을 가져와서 서버쪽 쿠키값과 비교합니다.
같으면 인증, 다르면 페이지를 login.cgi로 튕겨버립니다.
인증된경우 2,3,4,5모두 이동이 가능하고 자유로운 브라우징이 가능하게 됩니다.
그러다가 사용자가 IE를 죽입니다. 즉 닫아버립니다.(logout없이)
그런데 이때 이전에 expire time이 60분으로 설정되어 있으므로 60분이 지난 뒤라야
Client가 가지고 있는 Cookie가 쓸모없게 되는데 그전에 사용자가 http://192.168.0.100/2.cgi
즉 알고 있는 login이후의 page URL이 있기때문에 이를 치고 들어 올수가 있습니다.
그렇게 된다면 사용자가 설정중간에 PC를 끄지 않고 어디 가게 된다면 다른 이가 와서
그 접속 page의 URL을 통해 access할 수 있게 되는 일이 발생가능합니다.

이를 막는 방법이 아직 제가 딸려서 그런지 이해가 안가는 부분입니다.

휘발성쿠키를 사용하는 것은 약간 이해가 갑니다만(아직 써보지는 못해서) 만약 cookie에 expire
time을 0으로 셋팅하고 다른 변수에 expire time을 따로 저장한다하면 페이지를 이동했을시에도
휘발성쿠키값전달이 가능한지요. 즉 1.cgi에서 셋팅된 cookie값이 있다면 그 이후 새로 loading된
2.cgi에서 이전의 cookie값을 보고 판단할수 있는(즉 CGI에서 CGI로 전달할수 있는)어떤 방법이
따로 있는건지요. cgi-string으로 넘기는 것이라면 그건 약간 저희쪽 사정으로 문제가 있습니다.
왜냐하면 실제로는 link의 주소들이 다른 frame에 있고 지정되어있는 것이라서 말입니다.

제 질문이 이해하기 어렵게 서술되었는지 아니면 제가 답변하신분들의 말씀에 이해력이 떨어지는 것인지
약간 곤혹스럽네요.^^a.

------------------Signature
바늘속에서 사막찾기 0.o

익명 사용자의 이미지

휴우 적느라 힘드셨겠네요..

인증부분 하나만 걸리는것이라면 위에서 언급한..

쿠키를 휘발성으로 만드시는게 맞겠네요..

다른방법은 별로 필요없을듯합니다.. 심플하게 휘발성쿠키

세션도.. 브라우저가 꺼지(서버엔 일정시간동안 남지만)면 사라집니다..

그부분은 클라이언트를 믿어야겠네요..

syjeon의 이미지

덧붙여 질문드립니다.
그럼 휘발성쿠키를 사용한다면.
한 CGI에서 인증후 cookie(expire time=0)를 셋팅한다음.
다른 CGI를 불러낼경우 인증은 어떻게 해야 하는지요.
다른 CGI를 불렀을경우 인증된 cookie인지를 검사하려면
cookie의 name과 속성값이 서버에 남아있는 것과 일치하는지
를 검사해야 하는데 휘발성이면 IE(즉 client)에서 다른 CGI를
불렀을때도 이전 cookie값을 그대로 가지고 있어야 이를 비교할
수가 있는데 그부분이 이해가 가지 않습니다.

너무 집요하게 질문드리는게 아닌지 모르겠네요.^^

------------------Signature
바늘속에서 사막찾기 0.o

익명 사용자의 이미지

휘발성 쿠키라고 하여서 매번 사라지는것은 아닙니다..

세션방식에 있어서도.. 발급된 세션이 휘발성이라고 하였지만

쿠키발급의 내용을 보시면 아시겠지만 도메인기반입니다..

예를들면 test.com 이란 도메인으로 쿠키를 발급할경우엔..

해당 쿠키는 test.com에서만 사용이되며.. test.com내에 웹페이지에

접근시에는 같은쿠키를 계속 사용할수있습니다.. 여기서 쿠키가 사라지는

시점은 브라우저가 꺼질때이겠지요 위에 한분이 말씀하신데로

파일로 저장하지않고 메모리에서만 올라가서 사용되는 시점입니다..

파일로 저장되면 차후에 로긴시에도 쿠키값을 expire되기전까진

다시 예전쿠키로 요청이 옵니다..

익명 사용자의 이미지

흐흠 질문이 여기서 끝나길 바라는 마음으로 한번더 정리합니다..

인증페이지에서 발급한 키더라도 다른페이지에서 인증을 체크할수잇도록

인증키에대한 유효기간을 가지고 다른cgi들도 인증정보를 확인할수있어야한다

는 가정하에 말씀드리는 겁니다.

- login.cgi -
1. 인증처리
2. 세션키 발급 ( 다른cgi 억세스 가능하도록 파일로 만들어서 저장 )

- page1.cgi -

1. 해당 세션키로 발급된 키를 찾아서 인증정보 확인함..
2. 내부 처리..

이런식이겠지요..

키가 사라지는시점은 위에 말한데로 브라우저가 꺼지는 시점입니다..

접근했던사람이 브라우저를 끄지않았고.. 다음사람이 유효시간안에

해당 브라우저로 다시접근할경우 접근이 가능하겠지요.. 이는 관리자의

몫으로 넘기는수밖에 없겠습니다..

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.