sessions & cookies, recuperation info

sessions & cookies, recuperation info - PHP - Programmation

Marsh Posté le 16-06-2005 à 01:09:53    

Salut,
 
J'ai fait un forum avec méthode d'identification qui propose deux choix :
Identification longue ==> cookie qui dure environ trois mois
Identification courte ==> banal cookie qui dure 30 min (estimation de la durée d'un passage sur mon site)
 
Maintenant que ceci est fait, je me suis intéressé au session et apparement c'est pas bien compliqué.
Seulement, j'aimerais pouvoir gérer le cookie longue vie et le cookie courte vie en un seul afin de ne pas avoir de test dans chacun des formulaires pour savoir qui du cookie ou de la session est present.
 
Je pensais faire un truc du genre :

Code :
  1. if (isset($_COOKIE['pseudo']) && !isset($_SESSION[('nickpseudo')]))
  2. {
  3. session_start();
  4. $_SESSION['nickpseudo'] = $_COOKIE["pseudo"];
  5. }


code qui n'est censé s'executer qu apres identification (cookie courte vie) ou arrivée sur la page (cookie longue vie) et pi apres vivre sa vie.
 
mais pour une raison que je ne comprend pas ca ne fonctionne pas ...
les info disparaissent isset($_SESSION[('nickpseudo')]) me retourne FALSE des que le cookie n'existe plus.
 
Qqun sait il prkoi ? Ou a t il une meilleure idée ?
 
[edit]
bon j'ai encore cherché sur pas mal de sites, fait des tests et rien ..., les infos de session disparaissent dès que le cookie n'existe plus.
 
J'ai modifié le code  

Code :
  1. if (isset($_COOKIE['pseudo']) && $_SESSION['present'] != 'on')
  2. {
  3. session_start();
  4. $_SESSION['pseudosession'] = 'lol';
  5. $_SESSION['present']    = 'on';
  6. }


mais apres 10s (la durée de vie du cookie pour les tests :p)

Code :
  1. $_SESSION['present'] == 'on'

me retourne false ...


Message édité par Profil supprimé le 16-06-2005 à 02:59:53
Reply

Marsh Posté le 16-06-2005 à 01:09:53   

Reply

Marsh Posté le 16-06-2005 à 06:18:58    

ca veut dire que ton test est foireux [:spamafote]

Reply

Marsh Posté le 16-06-2005 à 08:37:39    

simogeo a écrit :

ca veut dire que ton test est foireux [:spamafote]


 
le test ligne 1 du premier code ?
ben non puisque j'arrive à lire les infos de session apres, tant que le cookie existe.  
apres la destruction du cookie, j'ai vraiment l'impression que la session n'existe plus puisque $_SESSION['present'] == 'on' me retourne false.
 
J'ai fait différents tests mais toujours le même résultat...

Reply

Marsh Posté le 16-06-2005 à 11:07:01    

ben deja, mettre le session_start dans le if, c'est pas malin ...


---------------
http://www.alsacreations.com , http://www.openweb.eu.org. Mon CV : http://cv.roane-irkana.net/. Exemple à ne surtout pas suivre : www.worldinternet.be
Reply

Marsh Posté le 16-06-2005 à 11:43:44    

pourquoi ?
ah vi mais en fait il faut que j'explique que cette page se charge a chaque page (la page apparait via un include) donc je suis obligé de mettre un if sinon ca crééra une session a chaque fois. Et puis si je le met dans une autre page, eh bien ca sera apres les headers

Reply

Marsh Posté le 16-06-2005 à 11:56:06    

session_start ne crée de nouvelle session que s'il n'y en a pas, sinon il continue la meme.  
 
...


---------------
http://www.alsacreations.com , http://www.openweb.eu.org. Mon CV : http://cv.roane-irkana.net/. Exemple à ne surtout pas suivre : www.worldinternet.be
Reply

Marsh Posté le 16-06-2005 à 11:56:08    

mais non ..... sors le!
et lis a ce sujet sur les sessions

Reply

Marsh Posté le 16-06-2005 à 11:59:35    

vi mais la est mon pb
je ne voulais de session que si j avais un cookie afin de mixer cette histoire de cookie long et court

Reply

Marsh Posté le 16-06-2005 à 12:01:41    

tu fais un session_start, mais tu n'initialise les variables de session que si le cookie est présent. C'est pas compliqué ...


---------------
http://www.alsacreations.com , http://www.openweb.eu.org. Mon CV : http://cv.roane-irkana.net/. Exemple à ne surtout pas suivre : www.worldinternet.be
Reply

Marsh Posté le 16-06-2005 à 12:03:52    

ok
vais essayer ca
merci du conseil

Reply

Marsh Posté le 16-06-2005 à 12:03:52   

Reply

Marsh Posté le 17-06-2005 à 02:10:00    

bien merci ca marche parfaitement
j'aurais une autre question.
J'ai lu pas mal de tuto sur comment dénombrer les utilisateurs présents sur le site. Tout ceux que j'ai vu utilisent l'adresse IP et requierent pas mal de code.
Je me demandais si il y avait un moyen de faire ca en se basant sur le nombre de sessions ouvertes...


Message édité par Profil supprimé le 17-06-2005 à 16:42:07
Reply

Marsh Posté le 17-06-2005 à 16:43:08    

Reply

Marsh Posté le 17-06-2005 à 16:54:36    

Ce que tu veux, c'est savoir qui est connecté ??  
 
Pour mon intranet, j'ai fait comme ça :
 

Code :
  1. if (isset($_SESSION['user']) && isset($_SESSION['password']))
  2. {
  3.     $ref = mysql_query('SELECT * FROM members_connected WHERE user=\'' . $_SESSION['user'] . '\'');
  4. $compteur = mysql_num_rows($ref); // Vérification de l'existence de la connection du membre
  5. $id = '';
  6. $user = $_SESSION['user'];
  7. $timestamp = time();
  8. $connected = 'yes';
  9. $date_last_visit = $date;
  10. if ($compteur == 0)
  11. {
  12.     /* On exécute la requête pour insérer le nouveau membre */
  13.     mysql_query('INSERT INTO members_connected(id, user, timestamp, connected, date_last_visit) VALUES(\'' . $id . '\', \'' . $user . '\', \'' . $timestamp . '\', \'' . $connected . '\', \'' . $date_last_visit . '\')') or die(mysql_error());
  14. }
  15. else
  16. {
  17.     /* On modifie juste la date de la dernière visite ainsi que du timestamp */
  18.  mysql_query('UPDATE members_connected SET timestamp=\'' . $timestamp . '\', connected=\'' . $connected . '\', date_last_visit=\'' . $date_last_visit . '\' WHERE user=\'' . $user . '\'')or die(mysql_error());
  19. }
  20. }
  21. /* Mise à jour des données de la personne en passant son statut en non connecté, donc en dehors de la session */
  22. $time_5min = time() - (60 * 5); // time() - nombre de secondes
  23. $no_connect = mysql_query('SELECT * FROM members_connected WHERE timestamp <=\'' . $time_5min . '\'');
  24. $no = 'no';
  25. while ($no_connect1 = mysql_fetch_array($no_connect)) // Quand la personne ne fait rien depuis plus de x_time, ou alors n'est plus connectée
  26. {
  27.     $mode_nc = mysql_query('UPDATE members_connected SET connected=\'' . $no . '\' WHERE user=\'' . $no_connect1['user'] . '\''); // On passe en mode non connecté
  28. }

Reply

Marsh Posté le 17-06-2005 à 16:56:57    

Et après, tu interroge la table correspondante pour savoir le nombre de connecté(s), qui est connecté, etc. ;)

Reply

Marsh Posté le 17-06-2005 à 17:03:19    

Par contre, une chose ! J'allais oublié lol. Si la personne est connectée mais qu'elle ne fait rien depuis plus de 5 minutes, son statut passera en mode non connecté, par contre si elle redevient active, ça repasse en connecté. J'ai pas voulu détruire la session pour ça :D.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed