2011-01-04 2 views
0

예를 들어 Captcha를 사용하여 사용자가 사람임을 확인하는 장바구니를 개발 중입니다. 잘못된 제출 불행하게도헤더 리디렉션 및 보안 및 세션 유지 관리

<?php header('Location:https://mysite.com/cart.php?PHPSESSID=mysessionid'); ?> 

하여 사용자가 원본 확인 페이지로 리디렉션 수신되면 나는 URL에서 세션 ID를 전송하지 않은 경우, 나는 페이지 내 모든 세션 데이터를 잃게하고 (으로 session_start 호출) 새로운 세션을 시작합니다. PHP에서는 이것이 유일한 방법입니다. 이 방법은 URL을 사용하고 얻은 세션 ID를 사용하여 세션을 도용 할 수 있으므로 다소 불안정하다고 생각합니다. 이것은 사용자가 내 사이트를 떠난 다음에 위의 URL을 그들이 다음에 탐색 한 사이트의 추천 페이지로 기록하도록함으로써 수행 될 수 있습니다. 이 변수를 숨기는 더 좋은 방법이 있습니까? 이 정보를 개방형 매체에서 빼내고 세션을 모두 같은 공간으로 공중 납치 할 수있는 큰 위험이있는 것처럼 보입니다. 읽어 주셔서 감사합니다!

+1

그래서 세션 ID에 쿠키를 사용하지 않으십니까? – Gumbo

+0

이것은 대개 브라우저가 쿠키를 허용하지 않는 경우 (어쩌면이 특정 사이트에 대해) 또는 세션 쿠키가 비활성화 된 경우에 발생합니다. 어쨌든 : _every_ 헤더에 대한 올바른 표기법은'Name : Value'가 아니라'Name = Value'입니다. – KingCrunch

+0

@KingCrunch : 아니오, [헤더 필드 구문] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2)은 실제로'field-name "입니다 :"[field-value ]'while * field-value * 앞에 공백이 올 수 있습니다. – Gumbo

답변

2

보통 PHP 세션은 브라우저가 초기 요청과 함께 보내는 HTTP 쿠키에서 다시 초기화됩니다.

세션 쿠키가 유효하고 전송 된 동안 사용자는 임의의 임의의 페이지에서 브라우저를 자유롭게 지시하고 세션을 다시 초기화 할 수 있습니다.

세션이 다시 초기화되지 않으면 시작할 수있는 좋은 곳은 "이유"입니다.

관련 문제