IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Tache à la destruction de session


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 98
    Points : 72
    Points
    72
    Par défaut Tache à la destruction de session
    voila j'ai une tache a effectuer lors de la destruction de session
    pour cela je me suis tourner vers session_set_save_handler

    fonction d'activation de la session et du save_handler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function IsClientConnu(){
    		ini_set("session.save_handler", "user");
    		session_set_save_handler ("_open", "_close", "_read", "_write", "_destroy", "_gc");		
    		session_start();
    		Diapo_NouveauUtilisateur($Diapo_id);
     
    		[...]
     
     
    	}
    juste au dessus les fonctions de session que j'ai repris du net :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    function _destroy ($id) {
    	global $sess_save_path, $sess_session_name;
     
    	$sess_file = "$sess_save_path/sess_$id";
    // test
    	$sess_data = fread($fp, filesize($sess_file));
    	if ($fp = @fopen("$sess_save_path/log.txt", "w")) fwrite($fp, $sess_data);	
    // test
    /* fonction de suppression d'utilisateur */
    	Diapo_SupprimerUtilisateur($sess_data['Diapo_id']);			
     
    	return(@unlink($sess_file));
    }
     
    function _gc ($maxlifetime) {
    // test
    	global $sess_save_path;
    	if ($fp = @fopen("$sess_save_path/log2.txt", "w")) fwrite($fp, $maxlifetime);
    // test
    	return true;
    }
     
    function _open ($save_path, $session_name) {
    	global $sess_save_path, $sess_session_name;
     
    	$sess_save_path = $save_path;
    	$sess_session_name = $session_name;
    	return(true);
    }
     
    function _close() {return(true);}
     
    function _read ($id) {
    	global $sess_save_path, $sess_session_name;
     
    	$sess_file = "$sess_save_path/sess_$id";
    	if ($fp = @fopen($sess_file, "r")) {
    		$sess_data = fread($fp, filesize($sess_file));
    		return($sess_data);
    	} else {
    		return(""); // Doit retourner "" ici.
    	}
     
    }
     
    function _write ($id, $sess_data) {
    	global $sess_save_path, $sess_session_name;
    	$sess_file = "$sess_save_path/sess_$id";	
    	if ($fp = @fopen($sess_file, "w")) {
    		return(fwrite($fp, $sess_data));
    	} else {
    		return(false);
    	}	
    }
    Comme vous pouvez le voir j'ai mis quelques fonctions de test comme il est dit qu'aucune ecriture (echo,print) n'est possible pdt l'execution de ses fonctions



    Hors je n'ai aucun test qui marche, de même que ma fonction Diapo_SupprimerUtilisateur();

    J'ai regler mon php.ini comme suit :

    session.cookie_lifetime = 120
    ; 2Minutes
    session.gc_maxlifetime = 120
    ; 2Minutes
    session.cache_expire = 3
    ; 3Minutes

    Aurais je loupé un truc ?

    Plleeeaaase Heeeelp

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 98
    Points : 72
    Points
    72
    Par défaut
    bon j'approche un peu de la soluce

    j'ai modifié le php ini j'ai mis :

    session.gc_probability = 1
    session.gc_divisor = 1

    comme ca il execute le _gc() a chaque nouveau session_start()
    et donc en effet il me crée bien un fichier log2.txt

    seulement .... je n'ai toujours aucun fichier log.txt correspondant au declanchement de _destroy()
    aurais je mal compris l'utilisation des sessions ?
    la destruction de la session n'est elle pas automatique ?
    dois je le faire manellement dans _gc() ? (cay nul comme soluce)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 98
    Points : 72
    Points
    72
    Par défaut
    je sais pas si c'est normal mais du coup je supprime manuellement les fichiers de sessions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	global $sess_save_path,$sess_session_name;
    		$dir = dir($sess_save_path);
     
    		while ($nom = $dir->read()){	
    			$accessdate = fileatime("$sess_save_path/$nom");
    			if (($accessdate) and ($accessdate+$maxlifetime < time())){
    				if (strpos($nom,'sess_') === 0){				
    					$id=substr($nom,5,strlen($nom));
    					_destroy($id);
    				}
    			}
    		}
    	    return true;
    et la du coup ca fonctionne mais seulement lorsque gc est executé ce qui varie selon le nombre de session_start() - un peu aléatoire selon la frequentation du site ou alors pas du tout optimiser pour une forte fréquentation ... :/ va falloir choisir

Discussions similaires

  1. [JSP] Destruction de session.
    Par ran_hery dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 16/04/2009, 12h02
  2. Réponses: 9
    Dernier message: 02/09/2007, 21h39
  3. [Cookies] Pb destruction de session fermeture page
    Par Manuxy dans le forum Langage
    Réponses: 3
    Dernier message: 08/09/2006, 07h17
  4. Problème de destruction de session
    Par nmathon dans le forum Langage
    Réponses: 3
    Dernier message: 15/08/2006, 16h42
  5. [Sécurité] Destruction de session
    Par carter15_2001 dans le forum Langage
    Réponses: 12
    Dernier message: 06/01/2006, 12h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo