Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

[PHP5] Session probleem bij download script in IE

Pagina: 1
Acties:

Verwijderd

Topicstarter
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.
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.

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
snip: meldt dat in een TR ;) Ik zie geen session_start() in uw voorbeeld?

[ Voor 34% gewijzigd door BtM909 op 27-10-2008 18:43 ]


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Hallo Sebastiaan, welkom op GoT. Ik zie dat je de Devschuur® al hebt gevonden om je topic te plaatsen met je probleem.

In Waar hoort mijn topic? kan je lezen dat PHP (en andere programmeer) problemen / vragen in Programming horen. Vandaar dat ik je topic even verplaatst hebt naar het juiste subforum :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Verwijderd schreef op maandag 27 oktober 2008 @ 16:36:
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.
Hoe heb je dat geconcludeerd? Hoe zien de daadwerkelijke response headers eruit in IE en bijvoorbeeld FF?

Verwijderd

Topicstarter
moozzuzz schreef op maandag 27 oktober 2008 @ 18:23:
[mbr]snip: meldt dat in een TR ;)[/] Ik zie geen session_start() in uw voorbeeld?
Ik heb uiteraard een session_start() opgenomen in mijn code :)
BalusC schreef op maandag 27 oktober 2008 @ 18:47:
[...]
Hoe heb je dat geconcludeerd? Hoe zien de daadwerkelijke response headers eruit in IE en bijvoorbeeld FF?
Voor en na de 'download/open' komen de variabelen niet overeen in IE. (Ik krijg het niet voor elkaar om de response headers uit te lezen; dit wordt niet getracked in Firebug en/of IE voor file download (?)). Ik zie buiten de headers geen redenen om de sessie te verstoren... :S

Verwijderd

Topicstarter
Ik heb verder gezocht en ben soortgelijke problemen tegengekomen (http://nl.php.net/manual/en/function.session-start.php#51520). De oplossingen heb ik geimplementeerd, helaas zonder resultaat. Voor de volledigheid onderstaand de code:


PHP:
1
2
3
4
if(strpos($_SERVER['HTTP_USER_AGENT'],"MSIE")) {
  session_cache_limiter('public');
}
session_start();


PHP:
1
2
3
4
5
6
7
8
session_start()
//...

//Informatie wordt opgeslagen in de sessie. 
//De session array wordt bij een nieuwe session_start() gekopieerd in de sessie
session_write_close(); 

//.. force download script

Verwijderd

Topicstarter
Na verder testen van het script blijkt het sessie probleem zich alleen voor te doen op IE(7) onder XP. Onder Vista treedt het probleem niet op. Helaas is dit nog geen oplossing voor het probleem en wordt het er alleen maar vager op...
Pagina: 1