Communauté Informatique NDFR.net : Utilisation de sessions avec PHP - Programmation Web (HTML, PHP, ASP, Java, XML, etc.)
 
Utilisation de sessions avec PHP
Thread Tools Display Modes
Prev Previous Post   Next Post Next
  #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: 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
 

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 18:44.

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