En fait, j'ai bien résolu le problème grâce à une identification en deux étapes (identification + vérification au début du téléchargement), et c'est vraiment bien plus léger que de s'occuper d'un cookie, qui présente certes bien plus de fonctionnalités, mais assez inutiles dans mon cas.
J'aimerais bien savoir en quoi c'est plus léger qu'un :
if (isset($_SESSION['login']) && $_SESSION['login'] === true) { }
De plus tu peux très bien utiliser les sessions sans cookies en passant le SID dans l'URL et en forçant l'utilisation du SID en paramètre (en fixant session.use_cookies à 0, session.use_only_cookies à 0 et session.use_trans_sid à 1 via la fonction ini_set())
Ce code fonctionne parfaitement sans acceptation des cookies par le client (et en plus il ajoute automatiquement le SID dans l'URL
Enfin pour finir avec les sessions, si tu initialise bien ta session lors d'une connexion, tu n'auras aucun problème de cache et tes utilisateurs pourront se connecter avec plusieurs login sans que cela ne pose de problème.
Au moins avec cette solution, pour peu que tu sécurises un peu la session, tu n'auras plus de problème avec l'identification.
Ensuite, pour les fichiers que l'utilisateur peut télécharger, il suffit de les garder en session pour vérification avant d'envoyer le fichier demandé avec ta page php
// Dans la page de login
// Si le login est réussi
// on stocke les fichiers autorise
// dans la session
if ($login === true) {
$files = file_get_contents('./fichier_pour_l_utilisateur_hors_repertoire_web_avec_fichier_autorise');
$_SESSION['files'] = explode(';', $files);
$_SESSION['login'] = true;
} else {
unset($_SESSION['files']);
unset($_SESSION['login']);
}
// Dans la page de telechargement
// On vérifie que l'utilisateur est connecté
if (isset($_SESSION['login']) === false || $_SESSION['login'] !== true) {
// l'utilisateur n'est pas connecté
// on le renvoie sur la page de login
header('Location: login.php');
exit();
} else {
// l'utilisateur est connecté
// on vérifie que le fichier demandé
// fait parti des fichiers autorisés
if (in_array($_GET['music'], $_SESSION['files']) === true) {
// le fichier est bin, on l'envoie
// code d'envoie du fichier avec les headers
} else {
// le fichier ne fait pas parti de la liste
// on l'indique à l'utilisateur
echo 'fichier interdit....';
}
}
[^] # Re: SID
Posté par leviathan (site web personnel) . En réponse au message Accès réservé à des fichiers vendus. Évalué à 3.
J'aimerais bien savoir en quoi c'est plus léger qu'un :
if (isset($_SESSION['login']) && $_SESSION['login'] === true) { }
De plus tu peux très bien utiliser les sessions sans cookies en passant le SID dans l'URL et en forçant l'utilisation du SID en paramètre (en fixant session.use_cookies à 0, session.use_only_cookies à 0 et session.use_trans_sid à 1 via la fonction ini_set())
Ce code fonctionne parfaitement sans acceptation des cookies par le client (et en plus il ajoute automatiquement le SID dans l'URL
ini_set('session.use_cookies', 0);
ini_set('session.use_only_cookies', 0);
ini_set('session.use_trans_sid', 1);
session_start();
if (isset($_SESSION['id']) === false) {
echo 'pas de session';
$_SESSION['id'] = 42;
} else {
echo $_SESSION['id'];
$_SESSION['id'] = 1;
}
<a href='./test.php>lien
Enfin pour finir avec les sessions, si tu initialise bien ta session lors d'une connexion, tu n'auras aucun problème de cache et tes utilisateurs pourront se connecter avec plusieurs login sans que cela ne pose de problème.
Au moins avec cette solution, pour peu que tu sécurises un peu la session, tu n'auras plus de problème avec l'identification.
Ensuite, pour les fichiers que l'utilisateur peut télécharger, il suffit de les garder en session pour vérification avant d'envoyer le fichier demandé avec ta page php
ini_set('session.use_cookies', 0);
ini_set('session.use_only_cookies', 0);
ini_set('session.use_trans_sid', 1);
session_start();
// Dans la page de login
// Si le login est réussi
// on stocke les fichiers autorise
// dans la session
if ($login === true) {
$files = file_get_contents('./fichier_pour_l_utilisateur_hors_repertoire_web_avec_fichier_autorise');
$_SESSION['files'] = explode(';', $files);
$_SESSION['login'] = true;
} else {
unset($_SESSION['files']);
unset($_SESSION['login']);
}
// Dans la page de telechargement
// On vérifie que l'utilisateur est connecté
if (isset($_SESSION['login']) === false || $_SESSION['login'] !== true) {
// l'utilisateur n'est pas connecté
// on le renvoie sur la page de login
header('Location: login.php');
exit();
} else {
// l'utilisateur est connecté
// on vérifie que le fichier demandé
// fait parti des fichiers autorisés
if (in_array($_GET['music'], $_SESSION['files']) === true) {
// le fichier est bin, on l'envoie
// code d'envoie du fichier avec les headers
} else {
// le fichier ne fait pas parti de la liste
// on l'indique à l'utilisateur
echo 'fichier interdit....';
}
}