2011-01-06 7 views
6

wamp2.0 - PHP 5.3, apache 2.2.11에서 작업 중이지만 세션은 데이터를 저장하지 않습니다.PHP 세션이 작동하지 않습니다.

나는 세션의 매개 변수 (간체 버전) I 싶어 가게를 받아들이는 페이지가, 그래서

http://www.example.com/home.php?sessid=db_session_id 

에 올 때 스크립트가 보이는 같은 :

session_start(); 

$sessid = @$_GET['sessid']; 
if ($sessid) { 
    $_SESSION['sessid'] = $sessid; 
} 
var_dump($_SESSION); 

및 출력 :

array(1) { [0]=> string(13) "db_session_id" } 

나는 t없이 (link에 갈 때, 다음 괜찮지 만, 그는 sessid 매개 변수) $_SESSION 배열이 비어 있습니다. 나는 이벤트가 매개 변수없이 페이지로 가기 전에 $_SESSION['sessid'] = $sessid; 행을 주석하려고했지만 여전히 작동하지 않습니다.

session_id() 출력을 확인했으며 세션 ID는 동일하게 유지됩니다. 은 phpinfo에서

세션 설정()

Session Support enabled 
Registered save handlers files user 
Registered serializer handlers php php_binary wddx 

Directive Local Value Master Value 
session.auto_start Off Off 
session.bug_compat_42 On On 
session.bug_compat_warn On On 
session.cache_expire 180 180 
session.cache_limiter nocache nocache 
session.cookie_domain no value no value 
session.cookie_httponly Off Off 
session.cookie_lifetime 0 0 
session.cookie_path//
session.cookie_secure Off Off 
session.entropy_file no value no value 
session.entropy_length 0 0 
session.gc_divisor 1000 1000 
session.gc_maxlifetime 1440 1440 
session.gc_probability 1 1 
session.hash_bits_per_character 5 5 
session.hash_function 0 0 
session.name PHPSESSID PHPSESSID 
session.referer_check no value no value 
session.save_handler files files 
session.save_path c:/wamp/tmp c:/wamp/tmp 
session.serialize_handler php php 
session.use_cookies On On 
session.use_only_cookies On On 
session.use_trans_sid 0 0 

편집 :

세션은 iframe 대응에 의해 삭제됩니다. 이유를 모르겠지만, 이 댓글을 달았을 때 세션이 정상적으로 작동합니다. 문제는 iframe이 에 머물러 있어야한다는 것입니다 (물론 나쁘지 만 그것에 대해 아무 것도 할 수 없습니다). 음 ... iframe을 사용하는 세션을 에서 사용하기위한 해결 방법에 대해 알고 계십니까?

+1

브라우저에 '쿠키'가 설정되어 있습니까? –

+0

만약'$ _COOKIE' 변수를 뜻한다면 yes로 설정합니다. – Elwhis

+0

잠깐,이 스크립트는 저자의 목적에 완전히 틀리다는 것을 알기에 여기있는 유일한 사람입니까? $ _GET [ 'sessid']를 설정하지 않으면 $ sessid가 설정되지 않고 if 문이 실행되지 않습니다. – Shoe

답변

1

프레임은 동일한 도메인과 관련된 경우에만 세션에 액세스 할 수 있습니다. 예 :

<? 
$_SESSION["foo"]="foo"; 
?><html> 
<body> 
    <iframe src ="test.php" width="200" height="200"></iframe> 
</body> 
</html> 
<? 
print_r($_SESSION); 
?> 

iframe 외부와 내부에서 작업해야합니다. 스틸하는 데 문제가 시도하는 경우 :

<?php session_start(); 

    $sessid = $_GET['sessid']; 
    if (isset($sessid) && $sessid != "" && $sessid != NULL) { 
     $_SESSION['sessid'] = $sessid; 
    } 
    print_r($_SESSION);?> 
0

세션이 저장되지 않았다는 것에서 만 추측 할 수 있습니다. session.save_path -> c :/wamp/tmp는 쓰기 가능 (속성에서 읽기 전용 선택 취소) 폴더입니까? 아파치가 제어판의 관리자 도구에서 서비스의 해당 폴더에 쓸 충분한 권한을 가진 관리자 또는 일부 수준으로 실행되고 있습니까?

사실 확인하십시오 : PHP session vars not being maintained. 기본적으로 해당 페이지에서 session_id()를 두 번 실행하고 세션 ID를 비교합니다. 쿠키가 다른 경우 브라우저가 세션 쿠키를 허용하지 않습니다.

편집 : 이미 그 사실을 깨닫지 못했습니다.^

도움이 될 수 있습니다. Link < --- 세션 용 디버깅 코드로 두 번째 제안/대답을보십시오.

+0

모든 것은 ok이다. 세션 파일은 완벽하게 작성됩니다. 마지막 파일은'sessid | s : 0 : "";'을 포함하기 때문에 쓰여지지만 데이터는 없다. 이상한 점 – Elwhis

+0

var_dump ($ _ SESSION. "". $ _ COOKIE)를 실행할 수 있습니까? session_start 직후에? – Norm

+0

내 대답을 편집했습니다.보고자하는 다른 링크를 추가했습니다. – Norm

0

http://php.net/manual/en/function.session-start.php

당신은

당신이 sessid의 존재를 테스트하기 때문에 $에 추가 ... 그렇지 않으면 빈, 그것은 아무것도 등록을위한 $ _SESSION 전역 배열 안에 뭔가를 넣어 가지고 _SESSION, $ _SESSION은 비어 있습니다.

시도 뭔가 같은 :

session_start(); 
$_SESSION['sessid'] = 123456789; 
var_dump($_SESSION); 
+0

'if ($ sessid) ... '뒤에 변수 $ _SESSION에 var_dump하면 변수가 저장되지만 매개 변수없이 다른 페이지로 갈 때 안에 들어 있지 않습니다. – Elwhis

+0

이것은 내가 한 것처럼 당신의 질문을 오해합니다 . 그는 먼저 sessid 매개 변수를 설정하고 세션은 변수를 등록해야합니다. 그런 다음 sessid를 설정하지 않고 동일한 페이지에서 변수가 있어야합니다. – Shoe

0

...

도메인 자체를 사용하지 않았기 때문일 수 있습니다. 귀하의 질문에, 당신은 로컬 컴퓨터에서 개발하고 있지만, 당신은 example.com을 사용합니다. localhost를 사용하고 있다고 가정합니다.

당신은 하나, 로컬 호스트에 쿠키를 설정 예를 들어 볼 수없는 것을 알아야한다 : Cookies on localhost with explicit domain

가 다른 호스트에서 코드를 시도?

http://blog.perplexedlabs.com/2008/12/21/php-sessions-on-localhost/

0

나는 그것이 문제의 원인인지 알고하지는는 (오류 억제 @은 ... 밖으로의 장소 여기에 조금 보인다),하지만 난 조금 단순화 것이다.

그래서 대신 :

$sessid = @$_GET['sessid']; 
if ($sessid) { 
    $_SESSION['sessid'] = $sessid; 
} 

내가 사용하는 것 : 그런데

if (isset($_GET['sessid'])) 
{ 
    $_SESSION['sessid'] = $_GET['sessid']; 
} 

가, 나 또한 할 것 몇 가지 입력 검사에만 허용되는 문자가 포함되어 있는지 확인 $_GET['sessid']에.

1

비슷한 문제가 발생하는 경우이 테스트는 상당히 가치있는 테스트입니다. 브라우저에서 몇 가지 요청을 실행하고 얻은 결과를 확인하십시오.

<?php 

session_start(); 

$_SESSION['test'][] = time(); 

header('Content-type: text/plain'); 
print_r($_SESSION); 

저자에게 : 마지막 코멘트는 스크립트가 작동하고 있다고 언급합니다. 깨진 경우 위의 코드를 시도해보고 내가 얻은 것을 알려주십시오.

1

늙은 질문이지만, 나는 같은 문제로 여기에왔다. 질문에 대한 답변이 없었기 때문에, 여기에 내가 찾은 것이 나온다.

나는 비슷한 문제가 있었고 나의 경우에는 세션이 사용 된 모든 페이지에서 session_start()을 호출하지 않아서 문제가 발생했습니다. "로그인"페이지에서만 호출해야한다고 생각했지만 사실이 아닙니다.

게다가 <html> 태그 전에 session_start()을 호출해야한다는 것을 기억하십시오.

2

각 페이지에 session_start(); 명령을 호출해야합니다. 그것은 나를 위해 일했습니다. 출력 (html, 출력, 심지어 공백)이 사용자에게 보내지기 전에 이것을 호출해야합니다.

1

오늘은 서버에 저장되지 $ _SESSION으로 약 4 시간을 보냈다. 그것은 서버 문제로 판명되었습니다. 시스템 (Windows 2003, IIS 6)은 Windows 기본 임시 폴더 C : \ Windows \ Temp \를 사용하여 세션을 저장했습니다. 그것을 만들었지 만 그것은 비어있었습니다.

어떤 이유로 든 작동을 멈췄습니다 (이전에는 문제가 없었습니다). 내 최고의 추측에 도달했습니다 그것은 몇 가지 한계 또는 폴더가 단순히 너무 많은 파일이 포함되어 있습니다. session.save_path를 다른 폴더로 설정하여 정렬했습니다.

관련 문제