Goedemiddag,
Ik heb een security systeem geschreven voor een custom php(5) CMS dat een waarde bijhoudt in een sessie variabele. Het betreft een 'standaard' challange + md5 inlog waarna, bij een juiste login, het ip adres en een user restriction worden opgeslagen in een sessie variabele. Bovenstaande werkt naar wens en cross-browser met een aantal ajax based functions.
Ik heb een 'force download' script opgenomen van php.net (http://nl2.php.net/readfile, zie onderstaande script) waarbij een file wordt ingelezen buiten de http root en als download wordt aangeboden.
Bovenstaande script werkt als een zonnetje in Firefox, Safari en Opera. Er verschijnt een dialog window waarin ik kan kiezen uit standaard 'open', 'download' en 'cancel'. In Internet Explorer werkt het ook, maar wordt mijn sessie informatie weggegooid bij een 'open' of 'download' van de te downloaden file. Bij 'cancel' behoud ik mijn sessie informatie.
Bij een echo van mijn sessie variabele lijkt er niets aan de hand. Zolang de headers niet aangeroepen worden (of niet uitgevoerd kunnen worden door de echo voor de headers) blijft de sessie behouden. Dit probleem treedt alleen op in IE.
Ik vermoed dat dit probleem veroorzaakt wordt door de php headers. Het is mij echter een raadsel welke header de sessie verstoord in IE7.
Voor de volledigheid: Ik heb geen spaties of underscores in mijn filenames (dit zou problemen op kunnen leveren volgens een aantal bronnen). Tevens maakt ik gebruik van een P3P header.
Ik hoop dat iemand me kan vertellen waarom de sessie bij een file download verloren gaat in IE7 bij gebruik van bovenstaande script. Alvast ontzettend bedankt. Ik wil deze bug graag overwinnen na de uren die ik er nu ingestoken heb.
Ik heb een security systeem geschreven voor een custom php(5) CMS dat een waarde bijhoudt in een sessie variabele. Het betreft een 'standaard' challange + md5 inlog waarna, bij een juiste login, het ip adres en een user restriction worden opgeslagen in een sessie variabele. Bovenstaande werkt naar wens en cross-browser met een aantal ajax based functions.
Ik heb een 'force download' script opgenomen van php.net (http://nl2.php.net/readfile, zie onderstaande script) waarbij een file wordt ingelezen buiten de http root en als download wordt aangeboden.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <?php $file = 'monkey.gif'; if (file_exists($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($file)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); exit; } ?> |
Bovenstaande script werkt als een zonnetje in Firefox, Safari en Opera. Er verschijnt een dialog window waarin ik kan kiezen uit standaard 'open', 'download' en 'cancel'. In Internet Explorer werkt het ook, maar wordt mijn sessie informatie weggegooid bij een 'open' of 'download' van de te downloaden file. Bij 'cancel' behoud ik mijn sessie informatie.
Bij een echo van mijn sessie variabele lijkt er niets aan de hand. Zolang de headers niet aangeroepen worden (of niet uitgevoerd kunnen worden door de echo voor de headers) blijft de sessie behouden. Dit probleem treedt alleen op in IE.
Ik vermoed dat dit probleem veroorzaakt wordt door de php headers. Het is mij echter een raadsel welke header de sessie verstoord in IE7.
Voor de volledigheid: Ik heb geen spaties of underscores in mijn filenames (dit zou problemen op kunnen leveren volgens een aantal bronnen). Tevens maakt ik gebruik van een P3P header.
PHP:
1
| header('P3P: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"'); |
Ik hoop dat iemand me kan vertellen waarom de sessie bij een file download verloren gaat in IE7 bij gebruik van bovenstaande script. Alvast ontzettend bedankt. Ik wil deze bug graag overwinnen na de uren die ik er nu ingestoken heb.