Ik ben bezig met een opslag systeem voor files in een database. Dat werkt nu helemaal perfect.
Met getfile.php?id=xx kan je een bestand weer uit de database halen. Het php script checked of je bent ingelogd, de juiste rechten hebt, en biedt het bestand vervolgens aan als download. Werkt allemaal prima.
Probleem is echter dat het bestand absoluut niet gecached mag worden, aangezien de info uit de bestanden niet voor iedereen bedoeld is.
Daartoe gebruik ik nu al deze headers:
in mijn security class:
en in de getfile.php komt daar nog bij:
Die laatste Pragma: public is nodig om een bug in IE te passeren, die er voor zorgt dat je anders problemen krijgt met het downloaden van files, i.c.m. SSL en sessions. Als ik daar private of no-cache van maak dan doet hij het niet.
Als ik een bestand download en ik kies voor Save-As, dan wordt het bestand niet gecached. Als ik echter kies voor open, dan komt hij toch gewoon in de cache terecht. Heeft iemand enig idee wat ik hier aan zou kunnen doen???
Extra info: bestand kan alles zijn, het gaat nu even specifiek over een word / excel bestand maar dat zou niet uit mogen maken.
Gekke is trouwens dat als ik het zelfde doe met plaatjes waarvoor ik in de getfile alleen deze extra header gebruik er niets gecached wordt, ondanks dat IE het plaatje dan wel automatisch weergeeft en niet ter download aanbiedt.
Met getfile.php?id=xx kan je een bestand weer uit de database halen. Het php script checked of je bent ingelogd, de juiste rechten hebt, en biedt het bestand vervolgens aan als download. Werkt allemaal prima.
Probleem is echter dat het bestand absoluut niet gecached mag worden, aangezien de info uit de bestanden niet voor iedereen bedoeld is.
Daartoe gebruik ik nu al deze headers:
in mijn security class:
PHP:
1
2
3
4
5
6
| session_start(); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); |
en in de getfile.php komt daar nog bij:
PHP:
1
2
3
| header("Content-Type: $result[1]"); Header("Content-Disposition: attachment; filename=$result[2]"); header("Pragma: public"); |
Die laatste Pragma: public is nodig om een bug in IE te passeren, die er voor zorgt dat je anders problemen krijgt met het downloaden van files, i.c.m. SSL en sessions. Als ik daar private of no-cache van maak dan doet hij het niet.
Als ik een bestand download en ik kies voor Save-As, dan wordt het bestand niet gecached. Als ik echter kies voor open, dan komt hij toch gewoon in de cache terecht. Heeft iemand enig idee wat ik hier aan zou kunnen doen???
Extra info: bestand kan alles zijn, het gaat nu even specifiek over een word / excel bestand maar dat zou niet uit mogen maken.
Gekke is trouwens dat als ik het zelfde doe met plaatjes waarvoor ik in de getfile alleen deze extra header gebruik er niets gecached wordt, ondanks dat IE het plaatje dan wel automatisch weergeeft en niet ter download aanbiedt.
PHP:
1
| header("Content-Type: $result[1]"); |