Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/01/2012, 14h03   #1
Candidat au titre de Membre du Club
 
Homme
Inscription : août 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 54
Points : 12
Points : 12
Par défaut Avis pour page de profil

Bonjour à tout ceux qui verront ce message

Aujourd'hui, pour une fois, je ne poste pas de problème. Mais une idée dont j'aimerais des avis et de l'aide (si il y a) pour créer ma page de profil pour un forum. En effet, pour ma page de profil, j'aimerais créer un code spécial pour faire en sorte que :
  1. Si une personne non connecté au forum veut voir un profil, elle ne puisse pas et sera directement redirigé vers la page de connection.
  2. Sinon(c-à-d si elle est connecté), elle peut voir le profil de cette personne.
  3. Ensuite, si c'est la personne du profil qui le regarde, la page s'affiche mais avec les différentes commandes de modifications de fichiers.

J'avais pensé à ce code (dans les grandes lignes) :
Code :
1
2
3
4
 
if (condition = si la personne nest pas connecté) {redirection vers la page de connexion}
else (condition = si le connecté veut voir son profil) {afficher le profil avec les liens de modifications}
else (condition = si cest une autre personne qui veut la voir) {afficher juste le profil normal}
Je pense que mon code à l'air bon. Seulement l'idée générale est la CONNECTION !! Or j'ai appris qu'il y avait certains problème pour savoir si une personne est connecté... On ne peut savoir si la personne est juste 'endormis' sur le site ou bien si il est partis !? Bien sur je peux créer un code qui permettrais de faire au connecté 'endormis' la possibilité de faire savoir à la page qu'il est bien connecté. Mais je crois que ce code va aussi effacer la première condition et créer à une personne non connecté de voir le profil...

Qu'en pensez vous ??
ade-9774 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 14h46   #2
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 249
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 249
Points : 1 510
Points : 1 510
Salut,
moi j'aurai plutot vu ca comme ca :

Code :
1
2
3
4
5
if(pas connecte) { redirection }
else {
 affichage profile normal
 if(profile du membre connecte) { affichage liens de modification en plus }
}
__________________
La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

N'oubliez pas le Le tag resolu.

Need_!
Doksuri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 15h07   #3
Candidat au titre de Membre du Club
 
Homme
Inscription : août 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 54
Points : 12
Points : 12
Citation:
Envoyé par Doksuri Voir le message
Salut,
moi j'aurai plutot vu ca comme ca :

Code :
1
2
3
4
5
if(pas connecte) { redirection }
else {
 affichage profile normal
 if(profile du membre connecte) { affichage liens de modification en plus }
}
Ne risque pas d'y avoir des erreurs ?? Le code que tu propose est compliqué. Tu affiche d'abords le profil normal pour ensuite savoir si c'est bien le membre qui veut voir son profil, le voie avec les liens... Or faudrais remettre tout le code dans le if !! Ne serais-ce pas plus compliquer ??

Je m'intéresse plutôt sur le fait de la connexion ^^
si vous aviez des idées pour savoir si un membre est juste endormis sur le site ou si il est déconnecté =)
ade-9774 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 16h14   #4
Nouveau Membre du Club
 
Cyrille Keller
Inscription : juillet 2010
Messages : 66
Détails du profil
Informations personnelles :
Nom : Cyrille Keller

Informations forums :
Inscription : juillet 2010
Messages : 66
Points : 39
Points : 39
en fait les deux choses n'ont rien à voir ensemble directement

Si tu ordonnes tes if ils vont s'éxécuter dans l'ordre donc

if (pas connecté) { redirection}
if (profil=connecté) {affichage des liens}

ce qui fait que la redirection empêchera l'éxécution du second if

Ensuite pour la partie "réveillé" si tu veux simplement protéger tes données de qqun qui est parti en laissant une page ouverte fais un timout avec un compteur.
shaihulud1979 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 17h53   #5
Candidat au titre de Membre du Club
 
Homme
Inscription : août 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 54
Points : 12
Points : 12
Citation:
Envoyé par shaihulud1979 Voir le message
en fait les deux choses n'ont rien à voir ensemble directement

Si tu ordonnes tes if ils vont s'éxécuter dans l'ordre donc

if (pas connecté) { redirection}
if (profil=connecté) {affichage des liens}

ce qui fait que la redirection empêchera l'éxécution du second if

Ensuite pour la partie "réveillé" si tu veux simplement protéger tes données de qqun qui est parti en laissant une page ouverte fais un timout avec un compteur.
Justement c'est le problème que je disais à Doksuri
Moi je pensais plus à mon if, else, else qui ne peut se tromper car si le membre est connecté il pourra voir la page !! Mais je peux intelligemment refaire le code :
Code :
1
2
3
4
 
if (condition = si le connecté veut voir son profil) {afficher le profil avec les liens de modifications}
else (condition = si cest une autre personne qui veut la voir) {afficher juste le profil normal}
else (condition = si la personne nest pas connecté) {redirection vers la page de connexion}
ade-9774 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 18h46   #6
Membre du Club
 
Homme Florian siles
Webmaster
Inscription : juin 2011
Messages : 59
Détails du profil
Informations personnelles :
Nom : Homme Florian siles
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Webmaster
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : juin 2011
Messages : 59
Points : 47
Points : 47
Salut ade!

Je te propose ma vision des choses. En supposant que tu as un code lors de la soumission du formulaire de login, qui vérifie dans la base de donnée le pseudo et le mot de passe du membre. Si tout est bon, faire un $_SESSION['pseudo'] = pseudodumembre. Du coup, sur ta page profil.php:
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
<?php
// Requêtes SQL pour récupérer le profil demandé par le visiteur
// Fetch array sur la requete on va dire $data[] par exemple
if(isset($_SESSION['pseudo'])) { // Si la variable de session pseudo est initialisée
switch($_SESSION['pseudo']) {
     case $data['pseudo']:
         // Le pseudo du profil demandé est le même que la variable de session pseudo donc le membre est sur sa page
        $status=3;
     break;
 
 
      default:
        // La variable de session pseudo n'est pas la meme que le profil, donc un membre visite la page d'un autre membre
         $status=2;
       break;
 
}
}
else { // Si la variable de session pseudo n'est pas initialisée, donc simple visiteur non loggué 
$status=0;
}
?>

Du coup ensuite, tu affiches ta page de profil, et tu te sert de $status pour savoir ce qu'il faut afficher ou non (avec des if)
(J'espère que je suis pas à coté de la plaque =P)
flozza est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 00h01   #7
Candidat au titre de Membre du Club
 
Homme
Inscription : août 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 54
Points : 12
Points : 12
Belle vision des choses l'histoire du statue
Code :
1
2
3
4
5
<?php
if (isset($_SESSION['pseudo'])) { switch($_SESSION['pseudo'])  {case $data['pseudo']: $status=2; break;
default: $status=1; break; } }
else { $status=0; }
?>
J'ai mon formulaire et ma page de connexion, il faudrait que je puisse créer des cookies alors ^^ si une personne à un cookie et ba elle passe sinon rien !!
Mais petite question, si deux personnes ont le même pseudo !? (car elles auront le droit) Devrais-je faire par rapport à l'IP ou bien autre chose comme l'ID !?
ade-9774 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 00h10   #8
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 412
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2006
Messages : 412
Points : 537
Points : 537
Envoyer un message via MSN à amoiraud
Citation:
Envoyé par ade-9774 Voir le message
Belle vision des choses l'histoire du statue
Code :
1
2
3
4
5
<?php
if (isset($_SESSION['pseudo'])) { switch($_SESSION['pseudo'])  {case $data['pseudo']: $status=2; break;
default: $status=1; break; } }
else { $status=0; }
?>
J'ai mon formulaire et ma page de connexion, il faudrait que je puisse créer des cookies alors ^^ si une personne à un cookie et ba elle passe sinon rien !!
Mais petite question, si deux personnes ont le même pseudo !? (car elles auront le droit) Devrais-je faire par rapport à l'IP ou bien autre chose comme l'ID !?
Je pense que le mieux est d'utiliser l'ID de l'utilisateur, sinon j'aurais proposé quasiment la même solution que flozza en remplaçant le pseudo par l'ID de l'utilisateur.
Ensuite pour l'affichage des données en fonction du statut, je pense que tu peut faire une sorte de gestion de droits en listant toutes les fonctionnalités de la page, tu les stocks en base avec le niveau de droit correspondant (en l'occurence le statut), et pour chaque fonctionnalité, tu vérifie via une petite fonction si le niveau de droit de l'utilisateur correspond a celui de la fonctionnalité, ca reviens au même que de faire un if ($status == 3) a chaque fois, mais la c'est évolutif
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 00h18   #9
Candidat au titre de Membre du Club
 
Homme
Inscription : août 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 54
Points : 12
Points : 12
Citation:
Envoyé par amoiraud Voir le message
Je pense que le mieux est d'utiliser l'ID de l'utilisateur, sinon j'aurais proposé quasiment la même solution que flozza en remplaçant le pseudo par l'ID de l'utilisateur.
Je pense que cela sera mieux aussi

Citation:
Envoyé par amoiraud Voir le message
Ensuite pour l'affichage des données en fonction du statut, je pense que tu peut faire une sorte de gestion de droits en listant toutes les fonctionnalités de la page,
MY GOD je n'ai rien compris !! Aurais-tu juste un exemple codé si possible ?? :$

Citation:
Envoyé par amoiraud Voir le message
c'est évolutif
Évolutif !!? C'est-à-dire ??
ade-9774 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 01h14   #10
Membre expérimenté
 
Avatar de amoiraud
 
Homme Adrien
Développeur Web
Inscription : octobre 2006
Messages : 412
Détails du profil
Informations personnelles :
Nom : Homme Adrien
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2006
Messages : 412
Points : 537
Points : 537
Envoyer un message via MSN à amoiraud
Citation:
Envoyé par ade-9774 Voir le message
Évolutif !!? C'est-à-dire ??
C'est évolutif dans le sens ou si tu veux changer une des règles (du style les admin peuvent avoir des fonctionnalités supplémentaires, ou si d'un coup tu décide que les utilisateurs non connectés peuvent voir quelques informations au lieu d'être redirigé), tu aura juste a modifier les droits dans la base.


Citation:
Envoyé par ade-9774 Voir le message
Aurais-tu juste un exemple codé si possible ??
Je viens de fouiller dans ma banque de code et malheureusement je n'ai rien sur la gestion des droits, par grave on peut tenter de faire ca dans les grandes lignes :

Base de données :
- Une table status qui contiendra les divers statuts (non connecté, connecté, connecté et propriétaire du profil, admin, etc...) avec un champs statusId (clé primaire, auto incrément) et nomStatus.
- Une table fonctionnalites qui va lister les fonctionnalités, avec un champs fonctId et un champs fonctName.
- Une table status_droits qui va faire le lien entre les status et les fonctionnalités, un champs statusId_fk, un champs fonctId_fk et un champs droit en booleen.

Récupération du type de droit (ou statut)

La tu peut reprendre le code de flozza avec quelques petites modifs :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
if (isset($_SESSION['userId'])) {
  switch($_SESSION['userId']) {
     case $_GET['profilId']:
         // En supposant que tu appel ta page profil comme ca : profil.php?profilId=... sinon faut adapter
        $status = 3;
     break;
 
      default:
        // La variable de session userId n'est pas la meme que le profilId, donc un membre visite la page d'un autre membre
         $status = 2;
       break;
 
  }
} else { // Si la variable de session userId n'est pas initialisée, donc simple visiteur non loggué 
 $status = 0;
}
Page profil
Pour la page profil, tu peut ensuite gérer les choses comme ca (je prend l'exemple de l'affichage de l'avatar, avec un lien "modifier" pour l'utilisateur correspondant au profil) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
<div class="avatar">
  <img src="<?php echo $imgAvatar; ?>" /><br/>
  <?php
    // On verifie si l'utilisateur a le droit de visualiser cette fonctionnalité
    if (Droits::hasAccess($status, 'editAvatar')) {
  ?>
    <a href="editavatar.php?userId=<?php echo $_SESSION['userId']; ?>">Modifier l'avatar</a>
  <?php
    }
  ?>
</div>
Classe Droits :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
class Droits
{
    public static function hasAccess($statusId, $fonctName) {
      // Recuperation de l'ID de la fonctionnalite
      $res = mysql_query("SELECT fonctId FROM fonctionnalites WHERE fonctName LIKE '" . $fonctName . "'");
 
      // Recuperation du resultat de la requete...
 
      // On verifie si le status a le droit pour cette fonctionnalite
      $res = mysql_query("SELECT droit FROM status_droits WHERE statusId_fk = " . $statusId . " AND fonctId_fk = " . $fonctId);
 
      // Recuperation du resultat de la requete...
 
      return $droit;
    }
}

Voila, après tu peut te faire un module de gestion des Droits dans l'admin en ajoutant des fonctions dans la classe Droits afin de modifier et gérer les droits facilement, et si demain tu décide que l'admin peut modifier l'avatar de l'utilisateur, ba tu change juste la valeur du champs droit de la table status_droits pour le status de l'admin et pour la fonctionnalité "editAvatar"

PS : J'ai tapé ca a l'arrache donc y'a surement moyen de faire plus optimisé, et rien ne t'oblige de le faire exactement comme ca c'était juste pour te montrer le principe

PS2 : Ce code est plus adapté pour une gestion des droits avec des profils d'utilisateurs, la on utilise des status disponibles uniquement sur la page profil donc c'est pas super utile si tu ne l'utilise que sur cette page, mais bon si tu développe un forum je pense que t'aura besoin d'une gestion des droits à d'autres endroits, dans ce cas il faudra placer le statusId dans la table des membres.
amoiraud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 15h29   #11
Candidat au titre de Membre du Club
 
Homme
Inscription : août 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 54
Points : 12
Points : 12
Déjà un grand merci pour ta réponse
Très explicatif ^^
Mais tu m'as maintenant créé un doute Quand un forum est lancé sur le net, nous avons plus le droit de changer le code ?? Nous pouvons plus y toucher ??

Ensuite Pour mes pages (généralisons un peu). J'ai mon formulaire et je créé plusieurs champs (id, Nom, Prénom, Sexe, Adresse, Ddn, Identifiant, Mdp, mail, numtel) et ma personne est tout de suite redirigé vers la page de connexion !! Dis que la personne se connecte (là c'est l'explication, fais attention ) La personne qui est maintenant connecté est redirigé directement sur la page d'accueil. Donc je peut créé, comme je l'avais déjà dis, des cookies,
Code :
1
2
3
4
 
<?php setcookie('ID', 'mysql_query('select id from session where mail="'.$email.'"')', time() + 365*24*3600, null, null, false, true); ?>
<?php setcookie('email', 'htmlentities($_POST["email"], ENT_QUOTES)', time() + 365*24*3600, null, null, false, true); ?>
<?php setcookie('Mdp', 'htmlentities($_POST["password"], ENT_QUOTES)', time() + 365*24*3600, null, null, false, true); ?>
Est-ce que pour l'instant c'est bon !?
Si oui, je continue... Maintenant la personne possède deux cookies permettant de savoir qu'il est connecté ^^ (en quelque sorte, plutôt inscrit)
Dans mes pages, je vais donc inscrire un petit code de vérification :
Code :
1
2
3
4
5
6
7
8
9
10
<?php
$ID = stripslashes($_COOKIE['ID'])
$email = stripslashes($_COOKIE['email'])
$password = stripslashes($_COOKIE['Mdp'])
$v-email = mysql_query('select mail from session where mail="'.$email.'"')
$v-password = mysql_query('select Mdp from session where mail="'.$email.'"')
$v-ID = mysql_query('select ID from session where mail="'.$email.'"')
 
if ($email == $v-email and $password == $v-password and $ID == ...)
?>
Je me rencontre à un problème :O ma page de profil n'a pas d'ID "http://localhost/Lifenet/Profil/Profil-Information.php" je devrais faire comme ça je supose : "http://localhost/Lifenet/Profil/Profil-Information?id={id}.php"

Je reprends :
Code :
1
2
3
4
5
<?php
if ($email == $v-email and $password == $v-password and $ID == $_GET['id']) {// J'affiche le profil avec les liens de modifications}
else ($email == $v-email and $password == $v-password and $ID != $_GET['id']) {// Là j'affiche juste le profil sans rien d'autre}
else ($email == '' or $password == '' or $ID == '' ) {redirection vers la page de connexion}
?>
Voilà !! J'espère que vous avez eu le courage de bien regarder mon code ^^
Maintenant je veux juste savoir si mon code est bon, si il marche et enfin si il peut y avoir des choses à améliorer
TOUT POINT POSITIF OU NÉGATIF SERA PRIS EN COMPTE
ade-9774 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 10h19   #12
Membre chevronné
 
Avatar de Marc3001
 
Homme
Ingénieur développement logiciels
Inscription : février 2008
Messages : 430
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : février 2008
Messages : 430
Points : 682
Points : 682
Oh là là c'est dangereux des cookies avec les identifiants et mot de passe de l'utilisateur en clair.

Je te conseille d'utiliser les variables de session comme ça le client ne stocke que son ID de session en local et les variables sont elles stockées sur le serveur.

Enfin, ne stocke que l'ID de l'utilisateur dans ces variables, cela ne sert à rien de stocker son identifiant et encore moins son mot de passe.

A la place de ça :

Code :
1
2
3
<?php setcookie('ID', 'mysql_query('select id from session where mail="'.$email.'"')', time() + 365*24*3600, null, null, false, true); ?>
<?php setcookie('email', 'htmlentities($_POST["email"], ENT_QUOTES)', time() + 365*24*3600, null, null, false, true); ?>
<?php setcookie('Mdp', 'htmlentities($_POST["password"], ENT_QUOTES)', time() + 365*24*3600, null, null, false, true);
tu auras ça :
Code :
1
2
3
 
$id = mysql_query('select id from session where mail="'.$email.'"');
$_SESSION[ID]=$id;
Vérifie aussi à bien protéger les variables entrées par l'utilisateur pour te protéger notamment des injections SQL.
__________________
Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre.

Linus Torvalds
Marc3001 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 22h01   #13
Candidat au titre de Membre du Club
 
Homme
Inscription : août 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 54
Points : 12
Points : 12
Merci pour ta réponse Marc mais si une personne à juste quitter le site (inscrite mais elle a quitté) elle fait alors une session destroy !! Et qu'elle veuille voir une des pages de mon site. Comment je vais savoir qu'elle est encore 'connecté' mais elle qu'elle fait une session destroy !?
Je crois avoir lu quelque part que cela n'était pas très bien de laisser une session ouverte alors que l'user n'y est est plus... Dites moi si je me trompe ?
ade-9774 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 13h15   #14
Membre chevronné
 
Avatar de Marc3001
 
Homme
Ingénieur développement logiciels
Inscription : février 2008
Messages : 430
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : février 2008
Messages : 430
Points : 682
Points : 682
Effetivement tu peux utiliser les cookies dans ce cas ùais plutot avec un jeton qu'avec directement les données sensibles dedans.

L'idée c'est que le cookie doit contenir un jeton (chaîne aléatoire) générée par l'appli et utilisable une seule fois.

Quand le user se connecte à l'appli, tu génères un jeton que tu stockes dans le cookie et en base dans une table qui ne sert qu'à ça (avec le lien jeton - user en base).
Quand le user revient sur le site après s'être délogué tu checks le jeton (conservé car dans un cookie) et vérifie dans la base qu'il est valide, tu loggues directement le user et tu regénères un jeton pour ce user.
__________________
Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre.

Linus Torvalds
Marc3001 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 07h43   #15
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 727
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 727
Points : 3 294
Points : 3 294
Citation:
Envoyé par ade-9774 Voir le message
Merci pour ta réponse Marc mais si une personne à juste quitter le site (inscrite mais elle a quitté) elle fait alors une session destroy !! Et qu'elle veuille voir une des pages de mon site. Comment je vais savoir qu'elle est encore 'connecté' mais elle qu'elle fait une session destroy !?
Tout dépend comment elle quitte le site.
Si, comme sur ce forum, tu as prévu un bouton/lien "déconnexion" et quelle clic dessus, tu feras en sorte que la session sera détruite.
Après cela elle deviendra un internaute lambda (dès déconnexion on peu la rediriger vers la page d'accueil par exemple).
Théoriquement, on devrait pouvoir visiter le site (la partie "publique") sans avoir besoin de session.

Si une autre personne utilise la même machine (cas courant dans une entreprise), il n'y aura plus de problème, car il faudra à nouveau s'identifier.
Grosso modo, il n'y a pas lieu de tenter de savoir qu'on a affaire à la même personne (même poste client/navigateur/même IP), et tenter de la ré-identifier automatiquement, c'est là où on favoriserait une usurpation d'identité.
Il est préférable qu'après déconnexion, que la personne se ré-identifie elle même.

Citation:
Envoyé par ade-9774
Je crois avoir lu quelque part que cela n'était pas très bien de laisser une session ouverte alors que l'user n'y est est plus... Dites moi si je me trompe ?
Si on poursuit le cas précédent, donc si la personne ne clique pas sur "deconnexion", ou si tu ne prévois pas de se système, alors effectivement il peu avoir un problème.

Si une autre personne utilise la même machine, elle pourra utiliser le site identifiée avec le même profil, les mêmes droits que l'autre personne.
Mettre un système de déconnexion devient ici réellement utile (voir indispensable).
Mais si la personne oubli de le faire, alors c'est là où on ne peu pas faire grand chose.
C'est un peu le même problème que d'oublier son porte monnaie sur un comptoir, on ne peu guère tout gérer.

Ceci dit pas vraiment, car une session à une durée de vie, par défaut c'est 24 minutes (1440 secondes).
Donc s'il y a aucune activité, la session sera automatiquement détruite au-delà de ce délai.
D'où l'utilité de définir une durée ni trop courte, ni trop longue.
Une sorte de compromis entre laisser suffisamment la personne de lire un contenu (donc physiquement inactif coté navigateur, mais actif pour la personne qui lis), et pas trop long dans le cas où une personne qui quitte le site sans cliquer sur "déconnexion" et donc ne pas favoriser une usurpation.

A savoir aussi que, si une personne ferme un onglet, mais pas la fenêtre du navigateur, cela sans cliquer sur déconnexion, la session restera active car le cookie coté navigateur n'est pas détruit.
En général les cookies sont détruits lorsqu'on ferme le navigateur. (ça dépend du navigateur et comment il est configuré cependant).
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/01/2012, 20h14   #16
Candidat au titre de Membre du Club
 
Homme
Inscription : août 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 54
Points : 12
Points : 12
Alors déjà grand merci pour ces magnifiques informations RunCodePhp

Pour éditer ma page de profil (générale), j'ai réutilisé l'ingénieuse idée de Marc ^^ : donc j'ai créer un code aléatoire (changeante à chaque fois, bien sur) puis je le stocke dans un bon cookie puis dans une table de donnée.
Alors voici le problème auquel je suis confronté en ce moment et dont je ne comprends plus grand chose :
Quand l'user reviens sur le site, il a le cookie et peu donc rentré. Seulement il va bien falloir connaître son ID à cette personne, sinon si elle veut voir un profil je ne vais pas savoir si c'est un user quelconque ou bien l'user du profil... Donc je me suis "permis" d'y installer l'email ainsi que son ID...

Alors voilà le problème
Je n'arrive pas à enregistrer l'ID à partir d'une autre table. Code :
Code :
1
2
3
4
5
 
$_idp = mysql_query('select id from session where mail="'.$email.'"');
$sql="INSERT  INTO `temporaire` (`idp`, `email`, `hsah`)
VALUES ( '" . $_idp . "', '" . $email . "', '" . $chaine . "')";
$requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
Le code aléatoire s'inscrit bien ainsi que l'email. Or l'ID dans ma base est normal... Même en rajoutant auto_increment ou bien PRIMARY, ba cela ne marche pas... Il me refrabrique un nouvel ID !!
Donc en gros c'est la cata

Citation:
Exemple pour bien comprendre le problème.
Mon ID c'est 12 !! Quand je me connecte, le site m'envoie un cookie qu'avec le code aléatoire (sans l'ID et l'email... trop dangereux, j'ai appris) et il m'inscrit dans une base de donnée le code mais enregistre à partir des inputs l'email et donc l'ID de cette email (enregistrer grâce au formulaire). Mais quand je vais regardé dans ma base (phpadmi), je remarque que l'ID est 0 !! Donc qu'il n'a pas enregistrer l'ID de l'email que je possède...
ade-9774 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 21h46   #17
Membre chevronné
 
Avatar de Marc3001
 
Homme
Ingénieur développement logiciels
Inscription : février 2008
Messages : 430
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : février 2008
Messages : 430
Points : 682
Points : 682
Citation:
Envoyé par ade-9774 Voir le message
Le code aléatoire s'inscrit bien ainsi que l'email. Or l'ID dans ma base est normal... Même en rajoutant auto_increment ou bien PRIMARY, ba cela ne marche pas... Il me refrabrique un nouvel ID !!
Il est normal que si tu crées le champs ID en auto_increment ce soit mysql qui attribut une valeur à ce champ. C'est le but de auto_increment. Enlève le il ne correspond pas à ton besoin.

Le primary par contre ne devrait gueuler que si tu essaies d'ajouter une ligne avec une valeur qui existe déjà sur ce champ. Tu dois pouvoir le laisser mais dans ton code tu dois donc vérifier qu'aucune ligne avec ce champ existe avant d'insérer une ligne.
__________________
Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre.

Linus Torvalds
Marc3001 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 22h55   #18
Candidat au titre de Membre du Club
 
Homme
Inscription : août 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 54
Points : 12
Points : 12
Merci marc pour tes réponses
Sur un autre forum, j'ai réussi à régler ce léger détail ^^
je continue pour faire en sorte que ma page de profil respecte mes contrainte imposé
ade-9774 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 13h17   #19
Candidat au titre de Membre du Club
 
Homme
Inscription : août 2011
Messages : 54
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : août 2011
Messages : 54
Points : 12
Points : 12
Alors nouveau problème... oui je sais encore

Bon en rapide résumé :
Je vais sur ma page de connection, je me connecte (création du code aléatoire sur un cookie et enregistrer dans une table). Redirection vers ma page d'accueil, lien vers lequel je veux accéder à mon profil, je clique...


Alors voilà, pas de page de profil...
Il ne veut pas pas récupérer mon ID !! le code si vous voulez voir :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<?php session_start();
mysql_connect('localhost', 'root', '');
mysql_select_db('lifenet');
 
$hash = stripslashes($_COOKIE['hsah']);
$email = mysql_query('select email from temporaire where hash="'.$hash.'"');
$ID = mysql_query('select idp from temporaire where hash="'.$hash.'"');
$v_hash = mysql_query('select hash from temporaire where email="'.$email.'"');
$_SESSION['ID'] = $ID;
?>
 
<a href="Profil/Profil-Information?id=<?php echo '"'.$_SESSION['ID'].'"'; ?>.php">Profil</a>
ade-9774 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 13h21   #20
Membre chevronné
 
Avatar de Marc3001
 
Homme
Ingénieur développement logiciels
Inscription : février 2008
Messages : 430
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : février 2008
Messages : 430
Points : 682
Points : 682
Ajoute des logs ou des traces pour savoir où ça coince...

Dans ta base tu vois ton hash?
Il est bien lié au bon ID?
__________________
Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre.

Linus Torvalds
Marc3001 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h31.


 
 
 
 
Partenaires

Hébergement Web