2009-09-03 2 views
0

Ich habe ein webbasiertes System mit Benutzer-Login-Daten basierend auf Sitzungsvariablen erstellt.Wenn ich Dateien mit php/html exportiere, werden meine Sitzungsdaten zurückgesetzt

Manchmal, wenn ein Benutzer angemeldet ist und versucht, Tabellen in CSV oder XLS zu exportieren, scheinen die Sitzungsdaten zu löschen und der Benutzer wird aus dem System geworfen.

Dies ist der Header-Code, den ich verwende, um die Datei zu bedienen.

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 "); 

Wenn es hilft scheint es häufiger auf ie6 zu sein. Ich habe mich gefragt, ob jemand ähnliche Probleme hatte.

Dies ist der neueste Header, den ich ausprobiert habe. Immer noch kein Glück. Habe auch das gleiche Verfahren in FF/Opera/Safari getestet und es geht ihnen gut.

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

die abgelaufenen Header sollte in diesem Format sein (ja GMT): Läuft ab: Do, 01. Dez. 1994 16:00:00 GMT – OIS

Antwort

3

Der Pragma: public Header ist völlig ungeeignet für angemeldete Benutzer und nichts geht zu helfen.

Ich bin auch ein wenig verwirrt, warum Sie so viele Content-Type Header verwenden. Wählen Sie nur eins und eins.

Schließlich sind das die Header, die Sie explizit einstellen ... Sie haben keine Anrufe an session_destroy oder setcookie herum schweben Sie?

+0

Danke für die Antwort, nein ihre definitiv keine Anrufe, die Sitzung zu zerstören, gebe ich Ihnen Vorschläge einen Schuss und sehen, wie es geht. – Shane

+0

Wenn das Problem darin besteht, öffentlich eingelagerte Seiten an eingeloggte Benutzer weiterzuleiten, sollten Sie die Antworten zu diesem anderen Thread auschecken: http://stackoverflow.com/questions/49547/making-sure-a-webpage- is-not-cached-über-alle-Browser – searlea

+0

Hmm, das funktioniert definitiv nicht. Selbst wenn ich die meisten Header entferne, haben wir definitiv kein session_destory oder setcookie. Gibt es noch andere Anrufe, die das System machen könnte, um solche Probleme zu verursachen? Um zu erklären, ob ich ie6 öffne, mich anmelde und auf Exportiere nach Xls klicke, werde ich rausgeschmissen. Ich melde mich erneut an und drücke Export nach Xls, die Datei wird einwandfrei bedient. – Shane

Verwandte Themen