Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

1 utilisateur anonyme et 14 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

[PHP-SQL-HTML] Restreindre l'accès à des photos

 
n°8219
tifrere
Junos power
Profil : Dinosaure
Posté le 26-05-2004 à 10:08:30  profilanswer
 

Bonjour :hello: ,
 
Voila je réalise un site ou des personnes qui se logguent peuvent avoir accès a des photos qui leurs sont propres.
chaque personne se loggue et a sa session et accède a ses données persos.
je voudrais qu'il en soit de même pour leurs photos c'est possible de le faire ?
en gros je voudrais que l'on ne puisse pas voir les photos on tappant directement l'adresse
 
exemple : http://www.lesite.com/photos/photo1.jpg ne devrais pas s'afficher si la personne n'est pas loguée
 
j'ai pensé a plusieurs choses :  
 
- htaccess mais je souhaite eviter, ca ferais lourd avec en plus la session pour se logguer.
- des noms de photos qui changent aléatoirement et mis a jour dans la base de données pour permettre l'affichage pour l'utilisateur logué (je sais pas du tout comment faire ca, mais je pense que c'est possible) -> ca n'empècherais pas n'importe ki de browser le rep (sauf si on en interdit l'accès mais dans ce cas, si la personne trouve le nom d'une photo il pourrai la voir :/ )
 
bref se sont des photos confidentielles qui ne doivent être vues que par la personne qui se connecte
 
qqn aurait une idée ??


Message édité par tifrere le 26-05-2004 à 10:09:35

---------------
Speed, Quality, Price ... pick any two
n°8233
ollone
Part of the 'One brothers
Profil : Vieux de la vieille
Posté le 26-05-2004 à 16:07:06  profilanswer
 

Voila comment je ferais :
 
un script de "sécurité" est exécuté avant chaque page :
 

Code :
  1. <?
  2. // ====================================================================================
  3. // On inclut la description des classes dont les objets sont sauvegardés en session
  4. // AVANT d'ouvrir la session .../!\ IMPORTANT...
  5. include("DP_class_db.php" );
  6. include("DP_class_user.php" );
  7. // On active la session pour cette page
  8. // (toutes en fait, puisque ce fichier est appelé automatiquement
  9. // avant le traitement de n'importe quelle page)
  10. session_start();
  11. // ====================================================================================
  12. // L'objet 'utilisateur' existe-t-il ?
  13. if (!session_is_registered('USER')) {
  14.     $USER = new class_user();
  15.     session_register('USER');
  16. }
  17. // L'objet 'sql' existe-t-il ?
  18. if (!session_is_registered('SQL_OBJ')) {
  19.     if (!isset($DPDB)) include("DP_connect_db.php" );
  20. $SQL_OBJ = new class_dp_db($DPDB);
  21.     session_register('SQL_OBJ');
  22. $SQL_OBJ->connect();
  23. }
  24. else {
  25. // Oui, alors on rafraichit la connexion à la bdd.
  26. $SQL_OBJ->refreshConn();
  27. }
  28. // --------------------------------------------------------
  29. // On vérifie si on nous a envoyer des données à traiter.
  30. // --------------------------------------------------------
  31. if (isset($HTTP_POST_VARS)) {
  32. // Doit-on chercher à authentifier quelqu'un ?
  33. // ---------------------------------------------
  34. if (isset($HTTP_POST_VARS["dpId"]) && isset($HTTP_POST_VARS["dpMdp"])) {
  35.  $USER->authenticateDP(strtoupper(trim($HTTP_POST_VARS["dpId"])), trim($HTTP_POST_VARS["dpMdp"]));
  36. }
  37. }
  38. //$USER->debugClass();
  39. ?>


 
Donc ce script gère la création initiale de l'objet 'user'.
L'objet 'user' possède une propriété qui permet de savoir si l'utilisateur est identifié ou est encore un "visiteur".
 

Code :
  1. <?
  2. class class_user {
  3.   // Variables 'locales'
  4.   var $valid_dp = false;
  5.   var $id = null;
  6. var $ip = null;
  7. var $identifiant = '';
  8.   var $nom = '';
  9.   var $prenom = '';
  10.   var $email = '';
  11.   //-----------------------------
  12.   // Constructeur de la classe.
  13.   //-----------------------------
  14.   function class_user() {
  15.     $this->id = session_id();
  16.     $this->ip = $_SERVER["REMOTE_ADDR"];
  17.   }
  18.   //---------------------------------------------------------
  19.   // Fonction d'authentification de l'utilisateur connecté.
  20.   //---------------------------------------------------------
  21.   function authenticateDP($log,$pwd) {
  22.     global $SQL_OBJ;
  23.     // On tente de récupérer les informations de l'utilisateur tentant de se connecter.
  24.     $sql  = "select id, nom, prenom, email from authorizedDPs";
  25.     $sql .= " where identifiant like '".$log."' and motdepasse like '".$pwd."'";
  26.     // On execute la requête de sélection de l'utilisateur.
  27.     $sql_res = $SQL_OBJ->query($sql);
  28.  // Si on a un retour, on charge le dp identifié.
  29.  if ($sql_res) {
  30.   $user_nfo = $SQL_OBJ->fetch_array($sql_res);
  31.   if ($user_nfo) {
  32.       $this->setDPInformations($user_nfo, $log);
  33.   }
  34.  }
  35.  // On vide l'objet sql.
  36.         $SQL_OBJ->record = '';
  37.         $SQL_OBJ->free_result($sql_res);
  38.  // Si l'utilisateur est identifié comme DP.
  39.  if ($this->valid_dp) {
  40.   $this->saveLastConnection();
  41.  }
  42.                   [...]
  43. }
  44. ?>


 
Enfin, il ne te reste plus qu'à créer un répertoire par utilisateur et, à chaque traitement de page, de vérifier si l'utilisateur à bien le droit d'accéder au répertoire visé (correspondance sauvée en bdd).
 
ps: pourquoi ne stockes-tu pas tes images sous forme de BLOB ? Comme ca c'est encore plus facile...


Message édité par ollone le 26-05-2004 à 16:09:11
n°8235
tifrere
Junos power
Profil : Dinosaure
Posté le 26-05-2004 à 16:12:00  profilanswer
 

:jap: merci de ton aide je testerais ca demain la g plus trop le temps :D
je n'ai pas encore bien réfléchis a ce que je veux pour ca
 
mais effectivement les stocker directement dans la bdd serait une idée


---------------
Speed, Quality, Price ... pick any two

Aller à :
Ajouter une réponse