2013-04-23 2 views
0

내 HTML 양식이 처리 할 PHP 페이지로 보내집니다. 양식에 captcha를 추가해야하지만 HTML 페이지를 PHP로 변경할 수 없으므로 HTML 양식 내의 이미지로 출력되는 capcha.php 페이지에 표시된 captcha에 대한 세션을 설정해야합니다. 페이지로드시 세션 변수가 설정되었지만 프로세스 PHP 페이지에서이 세션을 검색 할 수 없습니다. 그냥 파이어 폭스 나 크롬 어디서이 문제가 참아. 그것은 IE에서 작동합니다.PHP 세션 - Firefox 또는 Chrome에서 세션을 검색 할 수 없습니다.

session_start(); // start a session 
$image = imagecreate(50, 20); //create blank image (width, height) 
$bgcolor = imagecolorallocate($image, 0, 0, 0); //add background color with RGB. 
$textcolor = imagecolorallocate($image, 255, 255, 255); //add text/code color with RGB. 
$code = rand(1000, 9999); //create a random number between 1000 and 9999 
$_SESSION['code'] = $code; //add the random number to session 'code' 
imagestring($image, 10, 8, 3, $_SESSION['code'], $textcolor); //create image with all the settings above. 
header ("Content-type: image/png"); // define image type 
imagepng($image); //display image as PNG 

PHP 프로세스 페이지 :

session_start(); 

print_r($_SESSION['code']); 

사람이 도움을 수있는 capcha.php에 세션을 설정

코드?

편집 * 나는 세션 함께 할 수있는 그 무언가가 내 HTML 양식에 이미지로 추가 capcha.php에 설정되는 생각합니다. 브라우저에서 capcha.php로 간 다음 process_email.php로 이동하면 세션이 설정됩니다. 따라서 이미지로 포함될 때 설정되지 않습니다. 누구든지이 문제를 해결할 방법을 알고 있습니까? *

+0

** process.php ** 페이지에서 세션을 다시 시작하는 이유는 무엇입니까? – dreamweiver

+0

파이어 폭스 또는 크롬에서 세션을 검색 할 수 없다고 했으므로 IE에서 할 수 있다고 말하고 있습니까? 아니면 세션을 전혀 가져올 수 없습니까? –

+0

IE에서 세션을 검색 할 수 있습니다. 세션 [ 'code'] 값이 있습니다. 파이어 폭스 나 크롬에 어떤 가치도 없다. – LeeTee

답변

0

값을 할당하기 전에 먼저 해당 세션의 설정을 해제하십시오.

+0

그것도 아직 비어있다. – LeeTee

0

돈 '

if (!isset($_SESSION['session_value'])) { 
} 

더 나은 프로그래밍 방법처럼 로그 아웃 파일에로 세션()와 조건을 추가하는 것을 잊지.

1

이것은 흥미로운 질문입니다. 이것을 더 자세히 설명하려고 노력하겠습니다.

  • PHP 세션을 정상적으로 시작하면 사용자에게 쿠키를 보냅니다. 사용자가 사이트의 다른 페이지를 열면 HTTP 요청 헤더에 PHPSESSID 개의 쿠키가 있으며 쿠키에서 세션 ID를 가져옵니다. 그런 다음 서버에서이 ID에 대한 세션을 찾고 세션 데이터를로드하십시오.
  • 일반적으로 주 HTML 문서에 쿠키를 설정합니다. 그러나 이것은 변경할 수없는 정적 문서이기 때문에하지 마십시오.
  • HTML에 포함 된 이미지에 쿠키를 설정합니다. 나는 전에 이것을 한 적이 없었으며 나는이 경우 브라우저가 어떻게 행동해야하는지 전혀 알지 못했다. 완벽하게 쿠키는 이미지에서 가져온 다음 모든 페이지에서 사용해야합니다.

나는 이것을위한 테스트를했다. 그리고 내 결과는 다음과 같습니다. Chrome에서 모든 것을했습니다. 즉, PHP 파일을 처리하는 형태로 쿠키를 얻을 수 있습니다.

HTML 페이지를 엽니 다. 이 페이지에는 쿠키가 없음을 알 수 있습니다. No cookies for the HTML page opened for the first time

이 페이지에서 이미지를로드하고 이미지 HTTP 응답에 쿠키가 지정되어 있습니다.

Image file with cookie for PHP session specified

은 내가 HTTP 요청에 정의 된 쿠키를 얻을 양식을 제출합니다. 살펴보기 : Form submitted and cookie defined

Google 크롬에서 예상대로 작동합니다.

도메인을 확인하는 것이 좋습니다. 양식, 이미지 및 제출 URL이있는 HTML 페이지의 전체 URL은 무엇입니까? 그들은 정확히 같은 도메인을 가지고 있습니까?

다른 도메인에서 HTTP 페이지를 한 번 더 테스트하고로드 한 이미지입니다. 그러나 이것은 크롬뿐만 아니라 IE 9에서도 작동하지 않습니다. 이것이 내가하는 일을 짐작할 수없는 이유입니다.

Chrome에서 개발 도구를 사용하고 모든 쿠키 및 페이지로드 요청을 확인하는 것이 좋습니다.

+0

깊이있는 답변을 주셔서 감사합니다. 당신이 설명하는 과정을 밟을 때, 나는 당신 자신과 같은 결과를 얻는 것처럼 보이지만, 세션 ID가 설정되어 있어도 여전히 process.php 페이지에서 세션을 출력하지 않습니다. – LeeTee

+0

Im 100 % 확실한 파일은 모두 동일한 도메인에 있으며 동일한 URL입니다. – LeeTee

+0

Hhhmm 세션 ID가 다른 것으로 보입니다. – LeeTee

관련 문제