Créer une session de téléchargement temporaire dans votre script (non testé, mais vous obtenez le point d'être en mesure d'avoir plusieurs sessions différentes):
<?php
//normal session
session_start();
//store sessionid for retrieval
$oldsessionid = session_id();
if($_SESSION['logged_in']){ //or however you check for a valid user
//stop old/normal session
session_write_close();
//create a new sessionname
$oldname = session_name('UPLOADSESSION');
//create a new id (fixed here, you might want a random number/char combo:
session_id('myuploadsessionid');
//start the session
session_start();
$_SESSION['upload'] = true;
$uploadid = session_id();
//now you can use `'data: "artist="+$fi+"&UPLOADSESSION="'.$uploadid` in uploadify
session_write_close();
}
//return to normal name
session_name($oldname);
//set old session id
session_id($oldsessionid);
//resume normal session
session_start();
Donc, dans votre script de réception:
<?php
session_name('UPLOADSESSION');
session_id($_POST['UPLOADSESSION']);
session_start();
if(isset($_SESSION['upload']) && $_SESSION['upload']){
//accept files
//invalidate session after this upload
$_SESSION['upload'] = false;
}
L'utilisateur aura toujours 2 cookies, et éventuellement UPLOADSESSION est obsolète, mais vous ne l'utilisez pour rien d'autre que le téléchargement, et seulement pour 1 téléchargement (même si vous pouvez en autoriser plus).
Alternativement, vous pouvez simplement appeler un session_regenerate_id();
à la première demande après un téléchargement (il suffit de définir un drapeau dans le $_SESSION
lors du téléchargement).
Ici l'utilisateur a toujours l'ID de session visible, mais est celui utilisé uniquement pour l'action de téléchargement, non? Ce que je n'ai pas compris, c'est comment cela empêchera le détournement de session puisqu'il sera affiché dans le code. Si la session est piratée, l'utilisateur ne peut toujours pas se connecter, car ce n'est pas la vraie session (utilisée pour la connexion) mais il peut envoyer des fichiers. Le seul truc que je peux voir ici est le drapeau 'upload'. Mais dans ce cas précis, l'utilisateur peut envoyer beaucoup de fichiers sans recharger la page entière (c'est ce que fait le téléchargement). –
Aussi, disons que l'utilisateur a entré sur la page de téléchargement, la session a été générée, puis il attend pour une raison quelconque, à ce stade, quelqu'un qui a piraté la session peut envoyer des fichiers. Est ce bien? Est-ce que je manque quelque chose? –
Votre point était «session-fixation», ce qui sera empêcher (c'est-à-dire si quelqu'un est envoyé à un URL avec un post particulier/get var, ce ne sera pas l'identifiant de session de sa session connectée). Si vous êtes en train de servir la page au-delà de HTTPS, tous les paris sont, et oui, le pirate de l'air peut voir l'ID de session pour le téléchargement, mais encore: il peut également voir le cookie de session à ce moment-là, donc il peut être connecté pour de vrai. L'avoir en HTML n'est pas vraiment moins sûr que de l'avoir dans votre en-tête, et aussi facilement détourné. Le point est: cela empêche le détournement de session par la fixation, pas d'autres types de piratage. – Wrikken