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 :

Gestion de la durée d'une session en fonction d'un utilisateur


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 23
    Points
    23
    Par défaut Gestion de la durée d'une session en fonction d'un utilisateur
    Bonjour,

    Je voulais savoir si on pouvait géré la durée de vie d'une session en fonction d'un statut d'utilisateur d'un site par exemple ou de la page su laquelle on se trouve ou alors si c'est seulement d'une manière générale sur tout le site grâce au php.ini et à session.lifetime ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux tout a fait stocker en session une date d'un point d'entrée et comparer a chaque accès le temps écoulé depuis.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Stocker en session le timestamp de suppression de la session est aussi une solution.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Je ne sais pas si j'ai été très clair mais le but est le suivant.

    Une session pour un type de statut qui resterait ouverte jusque 60h après fermeture de la page alors que toute les autres fermeraient automatiquement à la fermeture de la page.

  5. #5
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Ben oui, j'avais bien compris. Utilise la combinaison "set_cookie" et "session_name()" pour faire expirer ton cookie quand tu le souhaites.

    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
    session_start();
     
    function newSession($expiration = 0) {
        $params = session_get_cookie_params();
     
        if ($expiration == 0) {
            $expiration = 0;
        } else {
            $expiration += time();
        }
     
        setcookie(session_name(), session_id(), $expiration, $params["path"], $params["domain"], $params["secure"], $params["httponly"]);
    }
     
    newSession(60 * 60 * 1); // Fait expirer la session dans une heure
    newSession(0); // Fait expirer la session à la fermeture du navigateur;
    Veuille à définir session.gc_maxlifetime supérieur à la durée maximale d'une session dans ton application.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Donc je dois passer la valeur de session.gc_maxlifetime à la somme maximale que je veux puis grâce à ton code la diminuer pour les autres utilisateurs?

  7. #7
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Non, défini juste gc_maxlifetime au moins comme la plus longue durée de session qu'il est possible d'avoir dans ton application, sinon tu risques d'avoir des sessions qui expirent avant ce qui était prévu.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Voila mon code mais ça ne marche pas (dans un premier temps je test juste pour voir la durée de vie de la session à bien été augmenté)

    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
    56
    57
    58
    59
    60
    <?php
    Require_once('db_fns.php');
     
    ini_set('session.gc_maxlifetime', 216000);
     
    session_start();
     
    if (isset($_POST['utilisateur']) && isset($_POST['mdp'])) {
    	$utilisateur = $_POST['utilisateur'];
    	$mdp = $_POST['mdp'];
     
    	$db_conn = db_connect ();
     
    	$requete = 'select * from user'
    			   ." where login = '$utilisateur'"
    			   ." and mdp = sha1('$mdp')";
     
    	$resultat = $db_conn->query($requete);
     
    	if ($resultat->num_rows) {
    		$_SESSION['user_ok'] = $utilisateur;
    		$row = $resultat->fetch_assoc();
    		$_SESSION['statut']= $row['statut'];
    		$_SESSION['nom']= $row['nom'];
    		$_SESSION['prenom']= $row['prenom'];
    		$_SESSION['id_user']=$row['id_user'];
    		$_SESSION['mail']=$row['mail'];
    	}
    }
     
    include ('entetes/entete.php');
     
    if (isset($_SESSION['user_ok'])) {
    	echo "</p>";
    	echo "<p>Vous &ecirc;tes bien connect&eacute;, Vous allez &ecirc;tre redirig&eacute; dans un instant.</p>";
    	echo "<head>";
    	/**echo '<meta http-equiv="refresh" content="0;url=news.php">';**/
    	echo "</head>";
    } else {
    	if (isset($utilisateur)) {
    		echo '<div id="texte"><p>Connexion refus&eacute;e</p></div>';
    	} else {
    		echo '<div id="texte"><p>Veuillez vous connecter.</p></div>';
    	}
    }
    ?>
     
    <div id="taille">
    <div id="formlog">
    <form method="post" action="index.php">
    <label for="utilisateur">Nom d\'utilisateur :</label><br />
    <input type="text" id="utilisateur" name="utilisateur" /><br /><br />
    <label for="mdp">Mot de passe :</label> <br />
    <input type="password" id="mdp" name="mdp" /><br /><br />
    <input class="submit" type="submit" name="submit" value="Connexion" />
    </form>
    </div>
    </div>
     
    <?php include ('pieds/pied.php'); ?>

  9. #9
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    C'est normal que ça ne marche pas. Avec ton code le fichier contenant ton identifiant côté serveur n'est plus supprimé rapidement, par contre ton cookie côté client est lui toujours effacé à la fermeture du navigateur ! Tu ne peux donc être connecté. D'où l'utilité de ma fonction postée juste au dessus.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    Bon ça marche mais à moitié on va dire...

    Voila le code
    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
    56
    57
    58
    59
    60
    61
    62
    63
    <?php
    Require_once('db_fns.php');
     
    ini_set('session.gc_maxlifetime', 259200);
     
    session_start();
     
    if (isset($_POST['utilisateur']) && isset($_POST['mdp'])) {
    	$utilisateur = $_POST['utilisateur'];
    	$mdp = $_POST['mdp'];
     
    	$db_conn = db_connect ();
     
    	$requete = 'select * from user'
    			   ." where login = '$utilisateur'"
    			   ." and mdp = sha1('$mdp')";
     
    	$resultat = $db_conn->query($requete);
     
    	if ($resultat->num_rows) {
    		$_SESSION['user_ok'] = $utilisateur;
    		$row = $resultat->fetch_assoc();
    		$_SESSION['statut']= $row['statut'];
    		$_SESSION['nom']= $row['nom'];
    		$_SESSION['prenom']= $row['prenom'];
    		$_SESSION['id_user']=$row['id_user'];
    		$_SESSION['mail']=$row['mail'];
    		if ($_SESSION['statut']=="admin") {
    			newSession(259200);
    		}
    	}
    }
     
    include ('entetes/entete.php');
     
    if (isset($_SESSION['user_ok'])) {
    	echo "</p>";
    	echo "<p>Vous &ecirc;tes bien connect&eacute;, Vous allez &ecirc;tre redirig&eacute; dans un instant.</p>";
    	echo "<head>";
    	/**echo '<meta http-equiv="refresh" content="0;url=news.php">';**/
    	echo "</head>";
    } else {
    	if (isset($utilisateur)) {
    		echo '<div id="texte"><p>Connexion refus&eacute;e</p></div>';
    	} else {
    		echo '<div id="texte"><p>Veuillez vous connecter.</p></div>';
    	}
    }
    ?>
     
    <div id="taille">
    <div id="formlog">
    <form method="post" action="index.php">
    <label for="utilisateur">Nom d\'utilisateur :</label><br />
    <input type="text" id="utilisateur" name="utilisateur" /><br /><br />
    <label for="mdp">Mot de passe :</label> <br />
    <input type="password" id="mdp" name="mdp" /><br /><br />
    <input class="submit" type="submit" name="submit" value="Connexion" />
    </form>
    </div>
    </div>
     
    <?php include ('pieds/pied.php'); ?>
    Si je mets la fonction newSession à 0 ça coupe tout de suite. Sinon ça dure toujours 24 min...
    Pourtant j'ai mes session.gc_probability et session.gc_divisor qui sont respectivement à 0 et 1000... Donc la je bloque ^^

  11. #11
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    En fait c'est logique, l'utilisation de la fonction "ini_set" ne modifie la valeur que pour le script courant. Dès que tu exécutes un autre script, la variable reprend sa valeur par défaut.

    Donc tu as plusieurs solution :

    - Si possible, tu la changes directement dans le fichier php.ini
    - Tu appelles la fonction "ini_set" obligatoirement à chaque appel au serveur
    - Tu utilises un fichier ".htaccess" placé à la racine de ton site avec la ligne suivante "php_value session.gc_maxlifetime valeurvoulue.."
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 23
    Points
    23
    Par défaut
    C'est ce que j'allais demandé en faite...
    Il faut que je répète l'opération sur chaque page ou je veux que se soit actif.
    En tout cas ça fonctionne merci pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Durée d'une session sur serveur mutualisé OVH pro
    Par cholopat dans le forum Langage
    Réponses: 3
    Dernier message: 29/09/2011, 10h47
  2. Gestion d'un bean dans une session
    Par embosfer dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 20/01/2010, 14h25
  3. Gestion de la persistence d'une session
    Par mamelouk dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 06/08/2009, 01h13
  4. Authentification / Durée d'une session
    Par MaxLaMenaX dans le forum Sécurité
    Réponses: 3
    Dernier message: 20/02/2009, 13h44
  5. Récupérer la durée d'une session utilisateur
    Par gazza dans le forum Langage
    Réponses: 3
    Dernier message: 20/09/2006, 10h22

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