2009-03-19 5 views
7

세션 변수를 설정 한 페이지가 아닌 다른 페이지에서 세션 변수를 사용할 수 없습니다. 세션 변수는 비 세션 변수처럼 작동합니다. 다른 유사한 포럼에 비슷한 질문이 게시되어 있지만 다른 경우에는 언제나 답변을 적용하지 않는 것으로 나타났습니다. 여기 PHP 세션 변수가 보존되지 않았습니다.

내 파일입니다

sess1.php

<?php 
session_start(); 

session_register("userid"); 
session_register("textvar"); 

$_SESSION['userid'] = 10333 ; 
$_SESSION['textvar'] = TextVariable ; 

echo "<p>User ID is: " . $_SESSION['userid'] . "</p>" ; 
echo "<p>Another variable is: " . $_SESSION['textvar'] . "</p>" ; 
?> 
<p>Go to the <a href="sess2.php">next page</a>.</p> 

하고, sess2.php

<?php 
session_start(); 

echo "<p>The userid session variable is: " . $_SESSION['userid'] . "</p>"; 
echo "<p>The other session variable is: " . $_SESSION['newvar']. "</p> "; 
?> 

각각의 경우에 브라우저의 출력은 다음과 같습니다

sess1.php

사용자 ID는 : 10333

또 다른 변수는 다음과 같습니다하면 textVariable

[다음 페이지]에

이동합니다.

sess2.php

사용자 ID 세션 변수이다

다른 세션 변수는 다음 [마지막 페이지]에

이동.

몇 가지가 아닙니다 :

  • 내가 두 파일의 상단으로 session_start()를해야합니까.
  • 변수 디렉토리가 쓰기 가능하며 세션 변수가 표시됩니다. (sess_b62라는 작은 파일이 약 100 개 있습니다. 'userid | i : 10333; textvar | s : 12 : "TextVariable";')
  • phpinfo()는 php.ini 파일 가 올바르게 읽혀지고 수명이 기본값 0으로 설정됩니다. 즉 브라우저가 닫힐 때까지입니다.

내 재치가있다. 어떤 제안?

고마워요.

+0

동일한 세션 ID가 사용되었는지 확인 했습니까? – Gumbo

+0

SSL을 통한 페이지 중 하나입니까? –

+0

실행중인 PHP 버전은 무엇입니까? (phpinfo()도) –

답변

2

동일한 세션을 여러 페이지에서 사용할 수 있도록하기 위해서는 세션 ID를 사용해야합니다. 일반적으로 이것은 쿠키로 이루어 지지만 (session.use_cookies 참조) URL이나 양식 (session.use_trans_sid 참조)으로도 수행 할 수 있습니다.

그래서 먼저 PHP가 올바른 세션 및 세션 데이터를로드 할 수 있도록 세션 ID가 전송되는지 확인해야합니다.

()가 될 수있는있는 가변 수의 인수를 받아들이는 또한 Is my understanding of PHP sessions correct?

+0

도움에 감사드립니다. phpinfo()는 쿠키를 사용하고 있으며 ID가 전송되고 있음을 확인하는 것 같습니다. session.use_cookies는 "On"이고 session.use_trans_sid는 0입니다. Set-Cookie는 첫 번째 페이지에서 생성 된 쿠키를 기록하며 해당 페이지의 이름은 referer입니다. –

+0

세션 ID는 두 페이지 모두에서 동일합니까?Set-Cookie 헤더 필드를 보낸다고해서 두 번째 요청과 함께 쿠키가 수락되어 전송 된 것은 아닙니다. 두 페이지에서'session_id()'반환 값을 비교해보십시오. – Gumbo

+0

Crud. 세션 ID가 다릅니다. 이제 뭐...? –

7

session_register()은 여기에서 문제를 일으킬 수 있습니다. session_register()에있는 문서를 읽으십시오 - 기존 변수를 사용하여 세션 변수를 지정하기위한 것입니다.

here에서

는 :

음,가 session_register() 특정 전역 변수가 세션 변수를 고려해야한다 PHP를 알려줍니다.즉, 스크립트 실행이 끝날 때 (세션 데이터 쓰기가 일반적으로 발생하는 경우) 해당 전역 변수의 결과 값은 현재 사용 가능한 세션 핸들러를 사용하여 작성됩니다.

나는 이것이 발생하는 문제라고 생각합니다. 스크립트 실행이 끝나면 세션 변수가 덮어 씁니다.

+0

예, session_register()는 더 이상 사용되지 않으므로 더 이상 사용하지 않아야합니다. 이 특정 문제의 원인인지는 모르겠지만 관계없이 해당 코드에 있어서는 안됩니다. –

+0

흥미 롭습니다. 저는 저작권 '07 인 입문용 PHP/SQL 서적에서 일하고 있습니다. 코드는 거의 직접적인 인용문입니다. 불행히도, session_register() 라인을 remvoing하는 것은 문제를 해결하지 못하는 것 같습니다. 정보를 제공해 주셔서 대단히 감사합니다. –

0

일부 도구를 사용하고 http 헤더를 확인하여 쿠키가 전송되는 방법을 확인할 수 있습니다. 아마도 귀하의 웹 서버가 잘못 구성되어 있으며 다른 도메인이 올바르지 않은 쿠키를 발송하는 것일 수 있습니다.

각 요청에 대해 session_set_cookie_params()를 수행하고 올바른 도메인, 경로 등이 설정되어 있는지 확인하는 것이 좋습니다.

-1

에 session_register를 사용하면 모두 파일이어야하며 제대로 작동해야합니다.

+0

제안 해 주셔서 감사합니다. 두 파일 모두에서 session_register() 행을 사용하여 두 가지 방법으로 시도했습니다. 동작에 대한 변경 사항이 나타나지 않았습니다. –

+0

session_register가 사용되지 않습니다. 피할 수 있으면 사용하지 마세요. – rhodesjason

+0

@ Jason : 일부 URL은주의를 환기시키지 않으려 고합니다. 대신 무엇을 사용해야합니까? –

2

하나의 실수는 첫 번째 파일에서 $_SESSION['textvar']을 설정하고 두 번째 파일에서 $_SESSION['newvar']을 호출하는 것입니다.

또한 내가 알고있는 서버에서 코드를 테스트 한 결과 위의 오류 이외의 다른 문제가 발생하지 않았습니다.

나는 또한 session_register()을 제거하려고 시도했지만 코드는 여전히 완벽하게 작동합니다.

+0

좋은 눈 - "newvar"는 오타였습니다. 코드를 새로운 간단한 파일로 복사했을 때부터 남았습니다. 그러나 session_register() 솔루션은 내 시스템에서 작동하지 않습니다. 제안 해 주셔서 대단히 감사드립니다. –

+0

쿠키 삭제 (또는이 사이트 쿠키 삭제)를 시도하고이 페이지를 다시 액세스하는 첫 번째 페이지로 액세스 해 보셨습니까? 또한 위의 다른 텍스트 또는

1

"가 session_register를 참조하거나 변수의 이름이나 변수 명 또는 다른 배열을 포함하는 배열을 들고 문자열 . 각 이름에 대해 session_register()는 전역 변수를 현재 세션의 해당 이름으로 등록합니다. "

이러한 이름의 변수가 없기 때문에 결과를 예측할 수 없습니다. 모든 위의 문제가 해결되지 않으면

단지 $_SESSION[$key] = $value;

1

을 사용, 거 야 그냥 뻔한 질문 : 난 인터뷰 여는 PHP 태그 앞에 공백이나 새로운 라인이있을 수?

또한 서버 오류 로그 파일에서 변수가 정의되었는지 여부를 알려주는 메시지를 확인할 수도 있습니다 (오류보고 수준에 따라 다름).

0

또 다른 분명한 것은 확인 :

는 디스크 공간에 여유 공간이 있는지 확인합니다; 세션 데이터가 저장되는 것을 방지합니다.

0

이전 게시물 인 것을 알고 있지만 비슷한 문제점이 있습니다 (session_register() 사용하지 않음).

세션이 너무 자주 시간 초과되어 서버가 설정되어 ('특수'Windows 서버 호스팅 환경 (Apache 포함)) PHP 세션 시간 제한 값을 변경할 수 없어 세션을 쿠키로 변환해야 함 .

최종 결과는 /이었다 지금은 수명 연장과 쿠키로 변환 한 후, 쿠키 데이터가 여전히 (전송시) 손실되는 것이 무엇입니까? 때때로.

매우 실망합니다.

나는 이제까지이 어쩌면 묻는 질문 당신이 LAMP 서버를 사용하는 여부가 아닌 LAMP 환경에서 일이 없었어요.

희망이 도움이됩니다. 나는 이것이 PHP 문제라고 생각하지 않는다.

3

나는 똑같은 문제에 직면했다. 이유는 입니다. php.ini 나는 session.cookie_secure 매개 변수의 값을 으로 설정했습니다. 하지만 URL에 https 대신 http를 사용하고있었습니다. https를 사용하여 문제가 해결되었습니다.

설정 session.cookie_secure = 1 쿠키는 오직 안전한 연결을 통해 전송해야 나타냅니다. 따라서 http를 사용하는 동안 모든 새 페이지에 새 session_ids가 표시됩니다.

0

PHP 서버의 서버 로그 (예 : nginx 또는 apache)를 확인하십시오.

세션이 nginx error.log에서 작동하지 않는 이유에 대한 정보를 찾을 수 있습니다. 해당 파일의 경로는 일반적으로 /var/log/nginx/error.log입니다.

제 경우에는 세션 데이터를 저장할 수 없다는 말입니다. 동일한 디렉토리에서 이전의 error.log.1 파일의 크기가 17GB 였고 사용 가능한 모든 디스크 공간을 차지한다는 것이 밝혀졌습니다.

단순히 디스크 공간을 비우면 세션의 정상적인 동작이 복원됩니다.

관련 문제