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, 12:49
Benjy's Avatar
Benjy Benjy is offline
Administrateur
 
Join Date: 21-08-2001
Location: Rueil Malmaison (92)
Age: 44
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
  #2  
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: 40
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
  #3  
Old 01-05-2004, 14:19
Benjy's Avatar
Benjy Benjy is offline
Administrateur
 
Join Date: 21-08-2001
Location: Rueil Malmaison (92)
Age: 44
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
  #4  
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: 40
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)
 
Thread Tools
Display Modes

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 07:03.

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