cgi 초보입니다.

charom의 이미지

CGI를 공부하고 있는데,
하나의 cgi파일에서 사용자가 처음 액세스하면,
1.입력화면(html)을 보여주고,
2.그것을 다시 cgi파일로 보내면(form의 action으로)
3.cgi파일에서 그것을 Query string의 Get으로 파싱하여,
4.다시 HTML로 결과를 보여주고자 합니다.

로직의 큰 그림중에서 사용자가 처음 접속한것인지 알아내는 방법이 있나요?
ENV{REQUEST_METHOD}를 해보면 첫 접속임에도 'GET'이 나오던데,

turningPoint의 이미지

요즘들어(요즘이라 할것도 없지만) 시니컬한 댓글들이 많이 있어 답변하기가 매우 조심스럽지만(실은 별로;;), 아는대로 답해봅니다.

우선 먼저 사용자가 처음 접속한것 이라는 말은 여러가지 의미를 내포하고 있습니다만
해당페이지를 접속한적이 있다/없다를 말씀하시는것이라면 구별해 낼수 있는 방법은 없습니다.

하지만 보통 이런경우 (예를들면 오늘하루 이창 보지 않기) 등등은 쿠키 존재 여부를 가지고 체크합니다만,
이부분이 client에 의존적이므로 사용자가 임의로 쿠키를 지워버린다던지, 타 브라우져로 접속해버리면 아무런 의미가 없는것 입니다.

"ENV{REQUEST_METHOD}를 해보면 첫 접속임에도 'GET'이 나오던데"
-> 이부분이 RFC2616 에서 정의한 Http header에 있는 값을 말씀하시는 것이라면,요청한 페이지에서 GET 방식으로 요청했다는 말입니다.
파일이나 DB를 이용하여 UID 저장하고 서버에서 Session Id를 가지고 체크 할수도 있겠지만, 위 내용만으로 봤을때 배보다 배꼽이 더 클듯 보입니다.

그렇다고 QueryString으로 input hidden atrribute를 이용하여 구분하는것은, 보안적인측에서 상당히 위험합니다.

Form Tag의 Method Attribute가 GET이 였을수도 있고 default(GET), 또 경유 페이지에서 dispatch 될 수도 있으므로 정확한 답을 드리기가 힘듭니다만,
적어도 Get이나 Post를 가지고 무엇을 판단할 수는 없습니다.
(간단히 proxy tool로 input 값들을 바꿔서 GET/POST 자유자재로 요청할수 있으므로)

P.S 입력과 출력 페이지를 따로 가지가는것이 바람직하다고 생각합니다.

댓글 달기

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