2017-02-27 8 views
1

먼저 중복 가능성에 대해 사과드립니다. 나는 같은 질문에 대해 많은 질문을 한 것을 알았고 나는 여러 가지 대답을 읽었다. 세션 변수가 작동하지 않는 데에는 여러 가지 이유가있을 수 있지만 주어진 응답이 아니라면 트릭을 수행 할 수있는 것처럼 보입니다. 그래서 내가 다른 질문을 열었고 당신이 나를 도울 수 있기를 바랍니다. IE와 Firefox는 PHP 세션 변수를 읽거나 지우지 않습니다

나는

첫 번째 파일은 세션 변수를 생성한다 ('ASC-OpenLDAP를'라는 이름의 오픈 수세 13.2 가상 서버에있는) 내 아파치 웹 서버에 다음과 같은 두 가지의 PHP 파일을 만들었습니다.

test1.php :

<?php 
    session_start(); 
    $_SESSION['test'] = 'test'; 
    header('Location: test2.php'); 
    exit(); 
?> 

번째 파일은 세션 변수를 판독하여 출력을 생성한다.

test2.php : 나는 일부 브라우저와 함께 programm에 테스트 한 지금까지

<?php 
    session_start(); 
    echo("Test: " . $_SESSION['test']); 
    session_unset(); 
    session_destroy(); 
    exit(); 
?> 

. Vivaldi 1.8은 test2.php에서 세션 변수의 내용을 정확하게 보여 주지만 Internet Explorer 11과 Firefox 51에서는 그렇지 않습니다.

물론 쿠키는 세 브라우저에서 활성화됩니다.

또한 session.save_path에서 세션 변수 파일을 확인했습니다. 모든 브라우저는 서버에서 세션 파일을 생성합니다. 이 파일의 내용은 항상 test|s:4:"test";입니다. 하지만 다시 비발디 만이 test2.php에서 파일을 삭제할 수 있습니다.

필자는 최종 사용자 도구가 될 수 있도록 가능한 한 호환 가능하고 다우 세이브해야합니다. 도와주세요.

+0

아무 데이터도 브라우저에 저장되지 않으며, 모두 서버 측에 저장됩니다. 브라우저에 저장되는 것은 모두 세션 ID가 포함 된 쿠키입니다. 일부 브라우저는 세션에서 데이터를 표시하지 못하는 경우 세션 ID 쿠키를 저장하지 않을 가능성이 있습니다. 문제의 브라우저에서 설정 한 쿠키 정책 때문일 수 있습니다. Firefox에는 서버에서 보낸 쿠키와 요청의 일부로 어떤 쿠키가 전송되는지 등을 표시 할 수있는 콘솔이 있습니다. 세션 쿠키의 상태를 확인하는 것이 좋습니다. – GordonM

+0

참. 그게 내가 그걸 확인한 이유야. ^^ 세션 날짜는 각 브라우저에서 서버에 저장되며 올바른 내용을 갖습니다. 파이어 폭스 콘솔에 다음과 같이 쓰여 있습니다 : 'Set-Cookie : "PHPSESSID = 8c5hskk514dlkmpvn16k1mvn41sifcrmnnaadcoofsr979hlkpt1; path =/var/lib/php5 /"'IE와 파이어 폭스에서 읽기와 삭제가 작동하지 않기 때문에 이미 저장된 데이터에 접근하는 것이 문제가된다고 생각합니다. – G4schberle

+0

Chrome 56도 작동하지 않습니다. Firefox 및 IE와 동일한 문제입니다. – G4schberle

답변

0

우리가 세션 쿠키에 지정된 경로가 잘못되었다는 것이 문제를 추론 할 수 있었던 대화에서부터입니다.

쿠키와 연결된 경로는 쿠키가 유효한 도메인 섹션을 지정합니다. 예를 들어 www.example.com/foo/bar/에 쿠키 만 유효하게하려면 쿠키의 경로는 /foo/bar/이어야합니다. 즉, 방문한 URL이 www.example.com/foo/bar/이거나 하위 경로 인 경우 쿠키 헤더에 세션 쿠키가 포함됩니다. 예 : www.example.com/foo/bar/baz/quux.php). www.example.com/foo/을 방문하면 쿠키가 쿠키 헤더의 서버로 다시 전송되지 않습니다.

사이트의 각기 다른 부분으로 나누고 싶을 때 유용합니다 (예 : 전자 상거래 사이트는 관리자 섹션에있는 경우 전자 상거래 사이트가 다른 세션 데이터를 유지하려는 경우 이 경우 경로는 test1.php 또는 test2.php가 포함되지 않은 경로로 잘못 설정되었습니다.

값을 session.cookie_path으로 설정하여 경로를 보편적으로 설정할 수 있습니다 (기본값은 /이어야하지만 설치에 포함되지 않음).

session_set_cookie_params()을 스크립트 단위로 설정할 수도 있습니다.

Vivaldi에서 가장 효과가 있었던 이유는 vivaldi에 쿠키의 path 매개 변수가 무시되는 버그가 있다는 것입니다. 이것에 관한 버그 보고서를 제출하는 것이 좋습니다. FireFox/IE/Chrome 외의 모든 동작이 올바른 동작이었습니다.