2009-09-03 2 views
0

세션 변수에 기반한 사용자 로그인 데이터로 웹 기반 시스템이 구축되었습니다.php/html로 파일을 내보낼 때 세션 데이터 재설정

가끔 사용자가 로그인하여 csv 또는 xls로 표를 내보내려고하면 세션 데이터가 지워지고 사용자가 시스템에서 '빠져 나옵니다'.

이것은 파일을 제공하기 위해 사용하는 헤더 코드입니다.

header("Pragma: public"); 
    header("Expires: 0"); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header("Content-Type: application/force-download"); 
    header("Content-Type: application/octet-stream"); 
    header("Content-Type: application/download"); 
    header("Content-Disposition: attachment;filename=file.xls"); 
    header("Content-Transfer-Encoding: binary "); 

이것이 도움이된다면 ie6에 더 많이 보입니다. 나는 비슷한 문제가있는 사람이 있는지 궁금해하고 있었다.

이것은 내가 시도한 최신 헤더입니다. 아직도 운이 없다. 또한 FF/Opera/Safari에서 똑같은 절차를 테스트 한 결과 괜찮습니다.

header('Cache-Control: no-store, private, no-cache, must-revalidate');  // HTTP/1.1 
    header('Cache-Control: pre-check=0, post-check=0, max-age=0, max-stale = 0', false); // HTTP/1.1 
    header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');     // Date in the past 
    header('Expires: 0', false); 
    header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT'); 
    header('Pragma: no-cache'); 
    header("Content-Type: application/vnd.ms-excel"); 
    header("Content-Disposition: attachment;filename=$fileName"); 
      header("Content-Transfer-Encoding: binary "); 
+0

만료일 헤더는이 형식이어야합니다 (예 : GMT) : 만료일 : 1994 년 12 월 1 일 16:00:00 GMT – OIS

답변

3

Pragma: public 헤더는 로그인 한 사용자를위한 완전히 부적절하고 어떤 도움이 될 수 없습니다.

왜 나는 많은 Content-Type 헤더를 사용하고 있는지에 대해 당혹 스럽습니다. 하나만 선택하십시오.

마지막으로 명시 적으로 설정하는 헤더는 ... session_destroy 또는 setcookie에 대한 호출이 없습니다.

+0

응답 해 주셔서 감사합니다. 세션을 삭제할 전화가 없었으므로 총을 제안하고 그것이 어떻게 진행되는지보십시오. – Shane

+0

로그인 한 사용자에게 공개적으로 캐시 된 페이지를 제공하는 데 문제가있는 경우이 다른 스레드에서 응답을 체크 아웃 할 수 있습니다. http://stackoverflow.com/questions/49547/making-sure-a-webpage- 모든 브라우저에 캐시되지 않습니다. – searlea

+0

흠, 확실히 작동하지 않습니다. 대부분의 헤더를 제거하더라도 session_destory 나 setcookie가 호출되지 않습니다. 그러한 문제를 야기 할 수있는 다른 전화가 있습니까? 내가 ie6을 열면 정교하게하려면 Xls에 로그인하고 내보내기를 눌러 버린다. 다시 로그인하고 Xls로 내보내기를 누르면 파일이 정상적으로 처리됩니다. – Shane