2013-03-01 2 views
1

어제 약 45 분 동안 연구하고 문제를 해결하기 위해 노력했기 때문에 다른 사람이 시도해 볼 수있는 아이디어가 있습니다.세션을 인식하지 못했습니다.

내 PHP 스크립트 중 하나가 세션 $_SESSION이 비어있는 것을 감지하여 시작하여 나머지 실행을 중단하고 저를 위해 오류를 던졌습니다.

이 전체 프로젝트는 적어도 1 년 동안 아무런 문제없이 해당 서버에서 작동했으며 그 이후로 코드 또는 서버에 대한 업데이트가 이루어지지 않았습니다. 여기

내가 그때 무슨 짓을했는지 : 나는, 테스트를위한 새로운 PHP 파일을 만든 <?php ?> 컨테이너 이전 또는 이후 아무것도 없었다 확인했다,이 코드를 썼다 : 나는하여 파일을 실행 한 다음

session_start(); 
var_dump($_SESSION); 
$_SESSION['test'] = 5; 

을 자체 반복적으로, 그리고 그것은 항상 빈 세션을 내놓았다.

이전에이 파일을 실행 했으므로 세션 파일이 서버 (내 경우 /var/lib/php5)에있는 폴더를 검사하여 올바른 디렉토리 소유자와 사용 권한이 있는지 확인하고 파일을 모두 삭제 한 다음 아파치를 다시 시작했습니다. 주사위가 없음 ...

파일을 몇 번 실행했고 각 세션마다 NEW 세션 파일이 만들어졌으며 세션 파일에 test = 5 항목이 포함되어있어 세션이 올바르게 작성됩니다.

그래서 브라우저 쿠키를 확인했습니다. 그들은 거기에 있으며 내가 할 수있는 한 일하고 있습니다. phpsessid 쿠키와 내 사이트에서 생성 한 다른 쿠키가 모두 있습니다. 모든 쿠키를 삭제 한 다음 테스트 파일을 다시 실행하면 phpsessid 쿠키가 정상적으로 다시 만들어지고 세션 파일로 만들어진 동일한 세션 ID가 포함됩니다.

또한 session_start(); 다음에 코드에 var_dump(session_id());을 추가했으며 스크립트가 실행될 때마다 새로운 세션 ID를 부여했습니다.

우리는 아직 session_status()을 지원하지 않는 PHP 버전을 실행하고 있습니다. 옵션이 아니기 때문에 (정확히 무엇을 할 지 확신 할 수 없습니다. 어쨌든 여기서는 맹목적으로 비행하고 있습니다).

그래서, 우리는 쿠키 올바른 ID를 포함, 파일이 데이터를 포함하는 세션이 제대로 만들어 알고있다.

내가 알 수있는 한, 문제는 쿠키 데이터를 서버로 다시 보내지 않는 브라우저 또는 쿠키에서 세션 ID를 기존 세션으로 인식하지 않는 서버에 있어야합니다.

Firefox를 테스트하는 동안 Firefox가 업데이트를 설치하려고 했으므로 업데이트를 실행했지만 변경 사항을 적용하지 않았습니다. Firefox가 쿠키를 받도록 설정되어 있으며 쿠키를 막을 수있는 곳을 찾지 못했습니다.

6 개월 동안 정상적으로 작동했기 때문에 일부 괴물 사고가 손상되었을 것입니다. Linux 또는 PHP 및 세션의 내부 작동에 대해 충분히 알지 못해서 진단 시작 위치를 알 수 없습니다. 난 아무것도 변경하지 않은 (그리고 내 모든 프로젝트는 항상없이 잘 작동하고있다)하는 session_write_close()을 시도했던 어떤 점에서

.일

있는 유일한 방법이 있었다 :

$c = $_COOKIE['phpsessid']; 
session_name($c); 
session_start(); 
var_dump($_SESSION); 
$_SESSION['test'] = 5; 

하지만 페이지의 톤에 session_start를 사용하고 난에 필요가 없습니다 코드를 입력 그들 모두를 가고 싶지 않아 첫번째 장소 ...

어떤 생각?

미리 감사드립니다.

--- 편집 ---

내가 다시이 문제로 확인, 나는 그래서지고, 쿠키 이름이 phpsessid 대신 PHPSESSID의 (@Cobra_Fast을 지적 해 주셔서 감사합니다)임을 확인할 수 있습니다 문제의 원인에 더 가깝습니다. 나는 의 값을 따옴표로 묶기 위해 php.ini 파일에 들어가서 아파치를 재시작했지만 여전히 변경이 없다. 쿠키 이름은 여전히 ​​소문자이다. 컴퓨터에서 바이러스 백신 프로그램을 찾지 못했지만이 작업을 수행 할 수있는 네트워크 보안이 있는지 의심 스럽습니다. @Cobra_Fast가 제안 된대로 PHP 설정이 손상된 경우 어떻게 수정 될 수 있습니까? 파일 편집만으로는 도움이되지 않았습니다 ...

+2

PHP 설정이 엉망이 된 것 같습니다. 나는 phps가'PHPSESSID'라고 불리는 것을 기대하면서'phpsessid'라는 쿠키에 세션 ID를 쓰는 것으로 의심합니다. –

+0

먼저 세션에 데이터를 설정하는 위치를 확인하고 나중에 다른 페이지에서 세션 내용을 확인하기 전에 세션에 실제로 내용이 있는지 확인 했습니까? 그냥'session_start(); var_dump ($ _ SESSION);'는 이미 세션을 생성하고 세션에 항목을 저장하지 않는 한 항상 비어있게됩니다. 세션 이름에'session_start(); $ _ SESSION [ 'loginuser'] = $ userid;'라고 쓰면 다른 페이지에서'session_start(); echo $ _SESSION [ 'loginuser'];'이전에 저장된 사용자 ID를 반환합니다. – Dave

+0

@Dave 그것은 동일한 파일을 여러 번 실행하는 저의 포인트입니다. 세션을 시작하고, 그 안에 무엇이 있는지 (비어 있음) 확인한 다음, 쓰기를합니다. 그런 다음 파일을 다시 실행하고 세션을 시작한 다음 그 내용을 확인하고 지난 번에 추가 한 데이터가 있어야합니다. 이것은 적어도 내 사이트에서 일 년 이상 동안 어떻게 작동했는지입니다. 네, 프로젝트에서 저는 사용자 아이디와 물건을 저장합니다.하지만이 테스트에서 나는 무엇이든 쓰고 싶었습니다. 글을 썼지 만 쿠키를 세션이나 다른 것과 연관시키지 않았습니다 ... – semmelbroesel

답변

2

더 많은 테스트를 거친 후에 우리는 정말 이상한 것을 발견했습니다 : 하나의 클라이언트 컴퓨터 만이 영향을 받았습니다! 다른 컴퓨터에서 코드를 실행했는데 정상적으로 작동하고 세션 쿠키가 제대로 기록되고 읽혀집니다. 그래서 서버가 전혀 작동하지 않았습니다! 이 컴퓨터가 어떻게 쿠키 이름을 소문자로 변환 할 수 있는지 전혀 알지 못합니다. 특히 두 브라우저에서 발생하기 때문에 전혀 이해가되지 않습니다 ... 하지만 적어도 상황에 대해 "수정"이 있습니다. 그들이 즉시 컴퓨터를 점검하고 필요하다면 다시 설치하겠다고 말한 이후로 우리 손에서 벗어났습니다. 나는 지금 당장이 문제에 대해 매우 혼란 스럽지만, 적어도 끝났습니다 :-) 답해 주셔서 감사합니다!

관련 문제