php세션에 대한 질문입니다.

lampu의 이미지

안녕하세요 번번히 신세를 지네요^^;

작업환경 : 아파치 2.0.53 +php5 ..

이해할 수 없는 세션 동작때문에 이렇게 질문드립니다.

현재 개발,운영중인 쇼핑몰에서 주문번호 생성시 세션을 이용하고 있습니다.

이렇게 $aaa라는 주문번호를 세션으로 생성하고 주문내역을 DB에 입력합니다.
$_SESSION['aaa'] = $aaa;

그리고 결재절차를 마친 후 결재정보를 DB에 입력한 후 해당 세션을 아래와 같이 초기화시킵니다.
session_unregister('aaa');

그런데....

갑자기 오늘 주문 하나에 문제가 생겼습니다. '아무개'란 분의 주문을 처리하는데 초기 주문번호까지는 정상적으로 생성이 되었습니다.
주문내역도 정상적으로 DB insert 되었는데,

결재진행중에 $aaa 세션변수가
한달쯤 전 '아무개'란 분이 구매하셨을 당시 주문번호로 변경되어 버린겁니다.

(의심하실까봐 그러는데...프로그램오류 아닙니다. 하루에 몇백건 주문일어나고 있는
현재 운영중인 쇼핑몰에서 어쩌다 한번 일어난 일입니다. 세션변수가 변경된 부분 확실함ㅡㅡ;;;)

결재정보가 DB에 insert될때 한달전의 주문내역으로 들어가버린거죠~ㅡ.ㅡ;;;

잴 의심가는 부분이 세션변수도 캐쉬를 먹느냐 입니다???..ㅜㅡ

참고로 한달전에 구매 시도했던 pc와 동일한 네트웍내에서 다른 pc에서 시도한 주문이었습니다.
(바로 옆에 있는 pc에서 시도)

캐쉬의 문제가 아니라면 어떤 경우의 수가 있을수 있을까요???

대략 어이없는 상황입니다.....도와주세용~~;;;;;

.

neogeo의 이미지

절대 그럴수 없습니다. 세션값은 서버측의 hashing 값이 일치해야 하기때문이죠.

제가보기에는 global_register 옵션이 켜져있는 php 에서

post 나 get 값등과 이름이 겹치면서 그럴 확률이 제일 클거 같습니다.

코딩하신 내용처럼 $_SESSION 을 모든 세션 변수마다 명시해 주셨다면.. 아니겠지만...

GET 같은걸로 예전 값을 넘기다가 그 값이 세션에 저장되어 버리는게 아닌가 확인해 보십시오.

$_GET['aaa'] , $_SESSION['aaa'] 를

$aaa 로 접근하면서 생겼을거 같은 느낌이 가장 강력하게 드는군요...

다른경우라면 몰라요 =3=3=3=3=3

Neogeo - Future is Now.

lampu의 이미지

변수값 전달은

주문과정 내내 최상 윗단에서
$aaa = $HTTP_SESSION_VARS[aaa];

이렇게 정의해주고 있답니다.
그외 과정에서 $aaa 를 재정의하는 코드는 없구요ㅜㅡ;;

sh.의 이미지

비슷한 경우인지는 모르겠지만 저도 세션 사용중에 이상한 경험을 한 적이 있는데,

일반 애플리케이션에서 사용하는 '마법사'처럼 페이지를 이동하면서 폼을 입력한 다음에 마지막 페이지에서 폼을 전송하면 서버측에서 DB에 넣거나 하는 부분이 있거든요.

페이지를 이동할때 폼의 값을 세션 변수에 저장을 하고요 마지막 페이지에서 "완료"버튼을 누르면 세션에 저장된 내용을 DB에 입력하는.. 그런 방식인데 이게 혼자서 개발할땐 괜찮다가 여러명이 달라붙어 테스팅을 하면 다른 사람의 폼값이 보이거나 하는 일이 간혹 생겨버리네요;;

세션 아이디가 겹칠수도 있는건지..... 혹시나 해서 /tmp의 세션 파일을 모두 지운다음에 서너명이 다시 로그인해서 작업을 해도 간혹 그런 현상이 생깁니다.

바로 서비스하는게 아니라 일단 넘어갔었는데 조만간 또 그 문제를 만날것같네요.
PHP에서 세션아이디를 생성할때 어떤 규칙을 쓰는지는 모르겠지만.. session_id() 함수로 세션아이디를 다시 생성하는게 도움이 될지도 모르겠네요.

댓글 달기

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