Ik gebruik een downloadscript geschreven in PHP om downloads aan de client aan te bieden, maar nu wordt regelmatig tijdens downloadscript de sessie om de een of andere reden gereset, waardoor de client wordt uitgelogd. Waardoor kan dit gebeuren?
Dit is de code voor het downloadscript:
De variabele om te kijken of iemand is ingelogd ziet er zo uit:
In de pagina waar het downloadscript zich bevind wordt als volgt gekeken of er ingelogd is:
Het vreemde is ook dat de sessie niet altijd geleegd wordt, maar ongeveer 1 van de 2 keer.
Dit is de code voor het downloadscript:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| // Download gedeelte if (!empty($action) and $action == "download") { $file = rawurldecode($_GET['file']); if (!empty($file)) { $filekey_result = dbquery("SELECT filekey, filename, owner FROM leeromgeving_diskspace WHERE filename = '$file' AND owner = '$loggedinowner'"); //Als hij de fileky niet vindt in diskspace tabel gaat het waarschijnlijk om een gedeeld bestand, zoek dan in de share tabel if(mysql_num_rows($filekey_result) == 0) { $filekey_result = dbquery("SELECT ld.filekey, ld.filename, ld.owner FROM leeromgeving_diskspace ld, leeromgeving_shares ls WHERE ld.filename = '$file' AND ls.share = '$loggedinowner' AND ls.filekey = ld.filekey"); } //Als hij iets gevonden heeft, bied dat bestand dan aan de browser aan if(!mysql_num_rows($filekey_result) == 0) { list($filekey, $filename, $fileowner) = mysql_fetch_row($filekey_result); $location = "./userfiles/".$fileowner."/".$filekey; header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header("Content-Disposition: attachment; filename=\"".$filename."\";"); 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($location)); ob_clean(); flush(); readfile($location); exit(); } //Niks gevonden? Geef dat netjes weer op het scherm else { print "<br><font color = 'red'><b>Het te downloaden bestand kon niet gevonden worden</b></font>"; } } } |
De variabele om te kijken of iemand is ingelogd ziet er zo uit:
PHP:
1
| $_SESSION['ingelogd'] = 1; |
In de pagina waar het downloadscript zich bevind wordt als volgt gekeken of er ingelogd is:
PHP:
1
2
3
| if ($_SESSION['ingelogd'] == 1) { //Pagina code staat hier } |
Het vreemde is ook dat de sessie niet altijd geleegd wordt, maar ongeveer 1 van de 2 keer.