Communauté Informatique NDFR.net

Communauté Informatique NDFR.net (http://www.ndfr.net/forums/index.php)
-   Programmation Web (HTML, PHP, ASP, Java, XML, etc.) (http://www.ndfr.net/forums/forumdisplay.php?f=65)
-   -   Utilisation de sessions avec PHP (http://www.ndfr.net/forums/showthread.php?t=4063)

SantX 01-05-2004 00:44

Utilisation de sessions avec PHP
 
Salut à tous, :D

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 !

Country 01-05-2004 01:57

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 ;)

SantX 01-05-2004 09:32

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 ?

Magi-X 01-05-2004 10:22

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 :)

SantX 01-05-2004 10:34

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 :o !

Benjy 01-05-2004 11:34

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 :o !

En stockant les ID de session en base de données (et je recommande de les générer soi-même).

SantX 01-05-2004 11:39

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 !

Benjy 01-05-2004 12:01

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.

SantX 01-05-2004 12:06

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 :D , mais cette méthode ne va pas surcharger le serveur de requêtes ?

Benjy 01-05-2004 12:11

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 :D , 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.

SantX 01-05-2004 12:40

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 :o , 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éé ?

Benjy 01-05-2004 12:49

Re: Utilisation de sessions avec PHP
 
Quote:

Originally Posted by SantX
Je connais pas le format HEAP :o , 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) !

SantX 01-05-2004 12:57

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 ?

Benjy 01-05-2004 14:19

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 ;)

SantX 01-05-2004 14:56

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 ;) !


All times are GMT +2. The time now is 17:15.

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