Communauté Informatique NDFR.net : Utilisation de sessions avec PHP - Programmation Web (HTML, PHP, ASP, Java, XML, etc.)
Reply
Utilisation de sessions avec PHP
Thread Tools Display Modes
  #1  
Old 01-05-2004, 00:44
SantX's Avatar
SantX SantX is offline
I'm watching you...
 
Join Date: 09-02-2004
Location: 127.0.0.1
Age: 39
Posts: 675
Send a message via ICQ to SantX Send a message via MSN to SantX Send a message via Skype™ to SantX
Utilisation de sessions avec PHP

Salut à tous,

Actuellement, je suis en train de coder un forum, et j'aimerai pouvoir passer l'id de la personne loguée par une variable de session.
Cela fonctionne très bien avec le passage par cookie de session, mais j'aimerai pouvoir le faire par les URLs car tout le monde n'accepte pas les cookie, et le problème est donc là...

Merci d'avance pour toutes vos réponse !
__________________
- La théorie, c'est quand on sait tout et que rien ne fonctionne.
- La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
- Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !

- Albert Einstein -
Reply With Quote
  #2  
Old 01-05-2004, 01:57
Country Country is offline
Membre junior
 
Join Date: 21-10-2003
Posts: 3
Re: Utilisation de sessions avec PHP

Voici un article de chez PhpTools4U très bien fait qui devrai te dépanner :

http://www.phptools4u.com/articles/view.php?article=4

Bon codage
Reply With Quote
  #3  
Old 01-05-2004, 09:32
SantX's Avatar
SantX SantX is offline
I'm watching you...
 
Join Date: 09-02-2004
Location: 127.0.0.1
Age: 39
Posts: 675
Send a message via ICQ to SantX Send a message via MSN to SantX Send a message via Skype™ to SantX
Re: Utilisation de sessions avec PHP

Quote:
Originally Posted by Country
Voici un article de chez PhpTools4U très bien fait qui devrai te dépanner :

http://www.phptools4u.com/articles/view.php?article=4

Bon codage
Merci Country,

Cet article je l'avais déjà lu mais il ne répondait pas à mon problème, à savoir comment récupérer l'ID de session sur la nouvelle page àprès l'avoir passer par l'url ?

Cela serait-il automatique ?
__________________
- La théorie, c'est quand on sait tout et que rien ne fonctionne.
- La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
- Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !

- Albert Einstein -

Last edited by SantX; 01-05-2004 at 09:33. Reason: Correction
Reply With Quote
  #4  
Old 01-05-2004, 10:22
Magi-X's Avatar
Magi-X Magi-X is offline
Modérateur
1 Highscore
 
Join Date: 31-10-2002
Location: Bruxelles
Age: 40
Posts: 816
Send a message via MSN to Magi-X
Re: Utilisation de sessions avec PHP

Quote:
Originally Posted by SantX
à savoir comment récupérer l'ID de session sur la nouvelle page àprès l'avoir passer par l'url ?

Cela serait-il automatique ?
ben je supose que tu utilise deja premierement sur chaque page le session_start() !

Donc maintenant que l'utilisateur ce log, tu le garde avec $_SESSION['ID'] = $nom_du_var['id'];

ou bien si tu veux prendre tout ce qu'il y a dans ta BDD des utilisateurs tu sais le faire avec ce petit lus:


PHP Code:
$array_user mysql_fetch_array($sql_check_login);
            
while (list(
$key$val) = each($array_user)) {
    if ( !
is_int($key) ) {
        
$_SESSION[$key]    = $val;
    }

Et donc comme ca pendant toute la session le variable seron dans l'array $_SESSION .

j'espere que c'est ca que tu demande
Reply With Quote
  #5  
Old 01-05-2004, 10:34
SantX's Avatar
SantX SantX is offline
I'm watching you...
 
Join Date: 09-02-2004
Location: 127.0.0.1
Age: 39
Posts: 675
Send a message via ICQ to SantX Send a message via MSN to SantX Send a message via Skype™ to SantX
Re: Utilisation de sessions avec PHP

Quote:
Originally Posted by Magi-X
ben je supose que tu utilise deja premierement sur chaque page le session_start() !

Donc maintenant que l'utilisateur ce log, tu le garde avec $_SESSION['ID'] = $nom_du_var['id'];

ou bien si tu veux prendre tout ce qu'il y a dans ta BDD des utilisateurs tu sais le faire avec ce petit lus:


PHP Code:
$array_user mysql_fetch_array($sql_check_login);
 
while (list(
$key$val) = each($array_user)) {
    if ( !
is_int($key) ) {
        
$_SESSION[$key]    = $val;
    }

Et donc comme ca pendant toute la session le variable seron dans l'array $_SESSION .

j'espere que c'est ca que tu demande
C'est pas exactement ça que je demande, mais ce petit système n'est pas trop mal !

Je voudrai savoir comment récupérer le SID de la session sur une autre page après s'être logué, bref comment faire marcher les session en faisant passer le SID de page en page si 'session.use_trans_sid' est à 'Off' !

Je m'excuse si je me suis mal exprimé ou si je n'est pas bien forlmulé ma question !
__________________
- La théorie, c'est quand on sait tout et que rien ne fonctionne.
- La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
- Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !

- Albert Einstein -
Reply With Quote
  #6  
Old 01-05-2004, 11:34
Benjy's Avatar
Benjy Benjy is offline
Administrateur
 
Join Date: 21-08-2001
Location: Rueil Malmaison (92)
Age: 43
Posts: 2,043
Send a message via MSN to Benjy
Re: Utilisation de sessions avec PHP

Quote:
Originally Posted by SantX
C'est pas exactement ça que je demande, mais ce petit système n'est pas trop mal !

Je voudrai savoir comment récupérer le SID de la session sur une autre page après s'être logué, bref comment faire marcher les session en faisant passer le SID de page en page si 'session.use_trans_sid' est à 'Off' !

Je m'excuse si je me suis mal exprimé ou si je n'est pas bien forlmulé ma question !
En stockant les ID de session en base de données (et je recommande de les générer soi-même).
__________________
Merci de lire et de respecter les règles et d'utiliser la .
Reply With Quote
  #7  
Old 01-05-2004, 11:39
SantX's Avatar
SantX SantX is offline
I'm watching you...
 
Join Date: 09-02-2004
Location: 127.0.0.1
Age: 39
Posts: 675
Send a message via ICQ to SantX Send a message via MSN to SantX Send a message via Skype™ to SantX
Re: Utilisation de sessions avec PHP

Quote:
Originally Posted by Benjy
En stockant les ID de session en base de données (et je recommande de les générer soi-même).
C'est pas trop mal comme idée, mais y a-t-il un moyen de les supprimer au bout d'un temps donné ?
Comme avec les sessions normales, un temps d'expiration en somme !
__________________
- La théorie, c'est quand on sait tout et que rien ne fonctionne.
- La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
- Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !

- Albert Einstein -
Reply With Quote
  #8  
Old 01-05-2004, 12:01
Benjy's Avatar
Benjy Benjy is offline
Administrateur
 
Join Date: 21-08-2001
Location: Rueil Malmaison (92)
Age: 43
Posts: 2,043
Send a message via MSN to Benjy
Re: Utilisation de sessions avec PHP

Quote:
Originally Posted by SantX
C'est pas trop mal comme idée, mais y a-t-il un moyen de les supprimer au bout d'un temps donné ?
Comme avec les sessions normales, un temps d'expiration en somme !
Oui : il te suffit de stocker aussi le timestamp de dernière activité et de le mettre à jour à chaque changement de page. Ensuite tu définis une durée d'expiration (par exemple 30 minutes), et si le timestamp en cours est supérieur, tu détruis la session et tu amènes ton visiteur à la page de connexion.
__________________
Merci de lire et de respecter les règles et d'utiliser la .
Reply With Quote
  #9  
Old 01-05-2004, 12:06
SantX's Avatar
SantX SantX is offline
I'm watching you...
 
Join Date: 09-02-2004
Location: 127.0.0.1
Age: 39
Posts: 675
Send a message via ICQ to SantX Send a message via MSN to SantX Send a message via Skype™ to SantX
Re: Utilisation de sessions avec PHP

Quote:
Originally Posted by Benjy
Oui : il te suffit de stocker aussi le timestamp de dernière activité et de le mettre à jour à chaque changement de page. Ensuite tu définis une durée d'expiration (par exemple 30 minutes), et si le timestamp en cours est supérieur, tu détruis la session et tu amènes ton visiteur à la page de connexion.
Merci Benjy,

C'est vraiment sympa de ta part de te pencher sur mon problème, et c'est pas que je veux être chiant jusqu'au bout , mais cette méthode ne va pas surcharger le serveur de requêtes ?
__________________
- La théorie, c'est quand on sait tout et que rien ne fonctionne.
- La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
- Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !

- Albert Einstein -
Reply With Quote
  #10  
Old 01-05-2004, 12:11
Benjy's Avatar
Benjy Benjy is offline
Administrateur
 
Join Date: 21-08-2001
Location: Rueil Malmaison (92)
Age: 43
Posts: 2,043
Send a message via MSN to Benjy
Re: Utilisation de sessions avec PHP

Quote:
Originally Posted by SantX
Merci Benjy,

C'est vraiment sympa de ta part de te pencher sur mon problème, et c'est pas que je veux être chiant jusqu'au bout , mais cette méthode ne va pas surcharger le serveur de requêtes ?
Avec cette méthode, la navigation inter-pages sur ton site nécessitera 1 requête par session (donc par visiteur) et par page, ce qui est tout à fait normal. De plus il s'agit d'un simple UPDATE, négligeable en terme de ressources, surtout si, commt tu vas le faire, tu fais de l'id de session une PRIMARY KEY
Tu peux aussi créer ta table SESSION au format HEAP.
__________________
Merci de lire et de respecter les règles et d'utiliser la .
Reply With Quote
  #11  
Old 01-05-2004, 12:40
SantX's Avatar
SantX SantX is offline
I'm watching you...
 
Join Date: 09-02-2004
Location: 127.0.0.1
Age: 39
Posts: 675
Send a message via ICQ to SantX Send a message via MSN to SantX Send a message via Skype™ to SantX
Re: Utilisation de sessions avec PHP

Quote:
Originally Posted by Benjy
Avec cette méthode, la navigation inter-pages sur ton site nécessitera 1 requête par session (donc par visiteur) et par page, ce qui est tout à fait normal. De plus il s'agit d'un simple UPDATE, négligeable en terme de ressources, surtout si, commt tu vas le faire, tu fais de l'id de session une PRIMARY KEY
Tu peux aussi créer ta table SESSION au format HEAP.
Je connais pas le format HEAP , mais avec cette méthode, j'utilise toujours le système de session conventionnel ou alors c'est comme si je créai mon propre système de session, les variables sont stockées où en définitive, dans ma table sessions ou dans une session appelée à l'aide de l'identifiant que j'aurai créé ?
__________________
- La théorie, c'est quand on sait tout et que rien ne fonctionne.
- La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
- Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !

- Albert Einstein -
Reply With Quote
  #12  
Old 01-05-2004, 12:49
Benjy's Avatar
Benjy Benjy is offline
Administrateur
 
Join Date: 21-08-2001
Location: Rueil Malmaison (92)
Age: 43
Posts: 2,043
Send a message via MSN to Benjy
Re: Utilisation de sessions avec PHP

Quote:
Originally Posted by SantX
Je connais pas le format HEAP , mais avec cette méthode, j'utilise toujours le système de session conventionnel ou alors c'est comme si je créai mon propre système de session, les variables sont stockées où en définitive, dans ma table sessions ou dans une session appelée à l'aide de l'identifiant que j'aurai créé ?
Les variables sont stockées dans ... tatsaaaam ... les deux (sécurité accrue) !
__________________
Merci de lire et de respecter les règles et d'utiliser la .
Reply With Quote
  #13  
Old 01-05-2004, 12:57
SantX's Avatar
SantX SantX is offline
I'm watching you...
 
Join Date: 09-02-2004
Location: 127.0.0.1
Age: 39
Posts: 675
Send a message via ICQ to SantX Send a message via MSN to SantX Send a message via Skype™ to SantX
Re: Utilisation de sessions avec PHP

Quote:
Originally Posted by Benjy
Les variables sont stockées dans ... tatsaaaam ... les deux (sécurité accrue) !
Donc si je comprend bien, j'aurai une table du genre :
SESSIONS(id_session, timestamp_session, var1, var2, ...);

Les mêmes variables dans une session :
$_SESSION['var1']
$_SESSION['var2']
$_SESSION['...']

Et pour ouvrir une session spécifique, je ferai :
session_start($_GET['id_session']); (si jamais je passe l'id par l'url !)

Est-ce bien cela ?
__________________
- La théorie, c'est quand on sait tout et que rien ne fonctionne.
- La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
- Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !

- Albert Einstein -
Reply With Quote
  #14  
Old 01-05-2004, 14:19
Benjy's Avatar
Benjy Benjy is offline
Administrateur
 
Join Date: 21-08-2001
Location: Rueil Malmaison (92)
Age: 43
Posts: 2,043
Send a message via MSN to Benjy
Re: Utilisation de sessions avec PHP

Voici le fichier la classe que j'utilise dans les scripts que je développe ($DB_site est ma couche d'accès à la base de données, $rooturl est l'URL de base du site, $sitename est le nom du site utilisé pour crypter le mot de passe, $sitemembercpdir est le lien vers la zone membres) :
PHP Code:
<?php
error_reporting
(E_ALL & ~E_NOTICE);

class 
Auth
{
 var 
$username '';
 var 
$password '';

 function 
auth_check()
 {
  global 
$_SESSION$DB_site$rooturl;
  
  
session_name('auth');
  
session_start();
  
  if(isset(
$_SESSION['id']))
  {
   
$session_id $_SESSION['id'];
   
$session_lastactivity intval($_SESSION['lastactivity']);
   
   if (
$session_id == md5(intval($_SESSION['userid']) . $_SESSION['username'] . $session_lastactivity))
   {
    
$result $DB_site->query("SELECT * FROM session WHERE sessionid = '" $session_id ."'");
    if (
$DB_site->num_rows($result) == 1)
    {
     
$current_time time();
     
$DB_site->query("UPDATE session SET lastactivity = " $current_time " WHERE sessionid = '" $session_id ."'");
     
$DB_site->query("UPDATE user SET lastactivity = " $current_time " WHERE userid = '" intval($_SESSION['userid']) ."'");
     
     
$past time() - 3600;
     
$DB_site->query("DELETE FROM session WHERE lastactivity < '" $past "'");
    }
    else
    {
     
header("Location:" $rooturl "/index.php");
     exit;
    }
   }
  }
  else
  {
   
header("Location:" $rooturl "/index.php");
   exit;
  }
 }
 
 function 
auth_login()
 {
  global 
$_SESSION$DB_site$rooturl$sitename$sitemembercpdir;
  
  
$enc_pass md5(md5(trim($this->password)).$sitename);
  
$result $DB_site->query("SELECT * FROM user WHERE username = '" trim($this->username) . "'");
  if (
$DB_site->num_rows($result) == 1)
  {
   
$row $DB_site->fetch_array($result);
   if (
$row['password'] == $enc_pass)
   {
    
session_name('auth');
    
session_start();
    
    
$current_time time();
    
$session_id md5($row['userid'] . $row['username'] . $current_time);
    
$DB_site->query("DELETE FROM session WHERE userid = '" $row['userid'] . "'");
    
$DB_site->query("INSERT INTO session (sessionid, userid, lastactivity) VALUES ('" $session_id "', '" $row['userid'] . "', '" $current_time "')");
    
$DB_site->query("UPDATE user SET lastactivity = " $current_time " WHERE userid='" $row['userid'] ."'");
    
    
$_SESSION['id'] = $session_id;
    
$_SESSION['userid'] = $row['userid'];
    
$_SESSION['username'] = trim($this->username);
    
$_SESSION['lastactivity'] = $current_time;
  
    
session_write_close();
    
    {
     
header("Location:" $rooturl $sitemembercpdir "/index.php");
     exit;
    }
   }
   else
   {
    
header("Location:" $rooturl "/index.php");
    exit;
   }
  }
  else
  {
   
header("Location:" $rooturl "/index.php");
   exit;
  }
 }
 
 function 
auth_logout()
 {
  global 
$_SESSION$DB_site$rooturl;
  
  
session_name('auth');
  
session_start();
  
  
$current_time time();
  
$DB_site->query("UPDATE user SET lastactivity = '" $current_time "' WHERE userid = '" intval($_SESSION['userid']) ."'");
  
  
$DB_site->query("DELETE FROM session WHERE userid = '" $_SESSION['userid'] . "'");
  
  
session_unregister('id');
  
session_unregister('userid');
  
session_unregister('username');
  
session_unregister('lastactivity');
  
  if (
session_register('id'))
  {
   
session_destroy();
  }
  if (
session_register('userid'))
  {
   
session_destroy();
  }
  if (
session_register('username'))
  {
   
session_destroy();
  }
  if (
session_register('lastactivity'))
  {
   
session_destroy();
  }
  
  
header("Location:" $rooturl "/index.php");
  exit;
 }
}
?>
Sur les pages nécessitant une identification :
PHP Code:
require_once('./includes/auth.php');
$auth = new Auth;
$auth->auth_check(); 
Sur la page de login ($username et $password ont été passés par un formulaire et, bien sûr, vérifiés comme ne contenant pas de caractère frauduleux) :
PHP Code:
require_once('./includes/auth.php');
$auth = new Auth;
$auth->username $username;
$auth->password $password;
$auth->auth_login(); 
Côté MySQL, j'ai ça (la clé sur userid n'est pas indispensable je pense) :
Code:
CREATE TABLE `session` (
  `sessionid` varchar(50) NOT NULL default '',
  `userid` int(10) unsigned NOT NULL default '0',
  `lastactivity` int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (`sessionid`),
  KEY `userid` (`userid`)
) TYPE=HEAP;
Avec tout ça tu devrais arriver à faire quelque chose de pas trop mal je pense
__________________
Merci de lire et de respecter les règles et d'utiliser la .
Reply With Quote
  #15  
Old 01-05-2004, 14:56
SantX's Avatar
SantX SantX is offline
I'm watching you...
 
Join Date: 09-02-2004
Location: 127.0.0.1
Age: 39
Posts: 675
Send a message via ICQ to SantX Send a message via MSN to SantX Send a message via Skype™ to SantX
Re: Utilisation de sessions avec PHP

Arrrrrrrrrrrgh !

N'ayant jamais créé de classe et encore moins utilisé, j'ai un peu de mal.
De plus il y a tellement de code que je m'y perd, il va me faloir un peu de temps pour étudier ça !
Mais je pense tout de même avoir saisis le concept général !

Merci encore Benjy !
__________________
- La théorie, c'est quand on sait tout et que rien ne fonctionne.
- La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
- Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !

- Albert Einstein -
Reply With Quote
Reply

Bookmarks


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Cours de français Benjy Discussions sur le site et/ou le forum 47 01-05-2006 14:47
generer xml/rss avec php Magi-X Programmation Web (HTML, PHP, ASP, Java, XML, etc.) 9 09-09-2004 23:57
Connexion Internet / Sessions Windows Toitoine Windows NT4/2000/XP Client 20 20-01-2004 19:46
Premiers pas sous Linux Fred Articles 19 21-10-2003 05:46
creer un site en php kenny250 Discussions sur le site et/ou le forum 5 03-11-2002 11:40

All times are GMT +2. The time now is 01:06.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.