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 :

Utilisation des sessions PHP [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 326
    Points : 156
    Points
    156
    Par défaut Utilisation des sessions PHP
    Bonjour,

    Je voudrais faire deux choses avec les sessions en PHP.
    La première est :
    - Pouvoir effacer la session de l'utilisateur lorsqu'il ferme le browser/l'onglet.
    Pour cela j'ai trouvé ce post : http://www.developpez.net/forums/d59...ermeture-site/

    La deuxième :
    - Remplir en base la date et l'heure de la "last connexion" de l'utilisateur lorsqu'il se déconnecte que ce soit par le bouton déconnexion ou par la x du navigateur.
    -> Quand l'utilisateur utilise le bouton déconnexion ce n'est pas un problème j'ai juste besoin de passer la requete dans mon déconnexion.php mais quand il se déconnecte via la x du browser je ne sais pas comment faire.

    D'après ce que j'ai compris du topic joint, dans body il faut rajouter le onunload dans le body. Cependant est ce qu'il ne va pas me fermer la session lorsque je vais changer de page ? Est ce que je dois placer la fonction dans tous les body de mes différentes pages ?

    [EDIT] : Voici le test que j'ai fais lorsque l'utilisateur utilise le bouton déconnexion mais ça ne met pas la base de données à jour :

    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
    <?php
    	session_start() ;
    	$LastConnection = getdate();
    	$reqLastCo = 'UPDATE config_users SET lastconnection = "' . $LastConnection . '" WHERE login ="' . $_SESSION['login'] .'"';
    	//destruction de toutes les variable de sessions
    	session_unset() ;
    	//destruction de la session
    	session_destroy() ;
    	?>
    	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
    		<head>
    			<title>CQuest - Deconnexion</title>
    			<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    			<link rel="stylesheet" type="text/css" href="CSS/chartecss.css" />
    		</head>
    	</html>
    	<?php
    	echo "Vous êtes maintenant déconnecté.<br />Vous êtes redirigé vers la page de connexion...";
    	//header("Refresh: 3; URL=login.php" );
    	header("Refresh: 1; URL=login.php" );
    ?>
    Merci d'avance pour les quelques pistes que vous pourrez me donner.

    Cdlt

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Le onunload est problématique puisqu'il ne fait pas la différence entr eune fermeture de page et un changement de page.
    Sauf is tu as un site dont la page ne change jamais (par exemple contenu changé par ajax) ça me parait compliqué de l'utiliser.

    Je vois au moins 2 solutions au problème :

    - Simplement enregistrer la date de dernière action (chargement de page , appuie sur bouton ...) et la considérer comme date de dernière connection. Très simple mais possiblement approximatif si l'utilisateur reste sur une page sans rien faire.

    - Faire un script ajax qui sur chaque page enverra par exemple toute les 5 sec la dernière date. Le problème c'est les ressources consommé si tu as beaucoup d'utilisateur.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    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
    Dans le script que tu nous montres, il n'y a ni connexion à la base de données, ni execution de la requête.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 326
    Points : 156
    Points
    156
    Par défaut
    @grunk : Merci pour ces précisions je vais voir avec mon collègue pour savoir vers quelle possibilité on va se tourner.

    @ sabotage :
    Voici le code corrigé :

    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
    <?php
    	require("connexion.php");
    	session_start() ;
    	$LastConnection = getdate();
    	print_r($LastConnection);
    	$reqLastCo = 'UPDATE config_users SET lastconnection = "' . $LastConnection . '" WHERE login ="' . $_SESSION['login'] .'"';
    	$bdd->exec($reqLastCo);
    	//destruction de toutes les variable de sessions
    	session_unset() ;
    	//destruction de la session
    	session_destroy() ;
    	?>
    	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
    		<head>
    			<title>CQuest - Deconnexion</title>
    			<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    			<link rel="stylesheet" type="text/css" href="CSS/chartecss.css" />
    		</head>
    	</html>
    	<?php
    	echo "Vous êtes maintenant déconnecté.<br />Vous êtes redirigé vers la page de connexion...";
    	//header("Refresh: 3; URL=login.php" );
    	header("Refresh: 20; URL=login.php" );
    ?>
    Le souci maintenant c'est que le getDate() renvoit un tableau avec les différents éléments qui composent la date.

    Je pense utiliser implode mais je ne sais pas si c'est possible de n'avoir que certains paramètres du tableau formé par getdate() ici $LastConnection. Le résultat que je voudrais avoir serait :
    dd/mm/yy-hh:mm:ss

  5. #5
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reqLastCo = 'UPDATE config_users SET lastconnection = TIME() WHERE login ="' . $_SESSION['login'] .'"';
    et utilise une colonne DATETIME.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 326
    Points : 156
    Points
    156
    Par défaut
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') WHERE login ="LSAVOYE"' at line 1' in /var/www/html/CQuest_reborn/deconnexion.php:6 Stack trace: #0 /var/www/html/CQuest_reborn/deconnexion.php(6): PDO->exec('UPDATE config_u...') #1 {main} thrown in /var/www/html/CQuest_reborn/deconnexion.php on line 6
    Voici le message d'erreur après avoir changer le type de ma colonne et après avoir remplacé ma requête par la tienne.

    De plus avec time on aura que l'heure non ?

  7. #7
    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
    oups
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reqLastCo = 'UPDATE config_users SET lastconnection = NOW() WHERE login ="' . $_SESSION['login'] .'"';
    De plus avec time on aura que l'heure non ?
    Pour avoir toutes les précisions sur ce que fait une fonction, tu as la doc ou tu peux simplement faire un test.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2013
    Messages : 326
    Points : 156
    Points
    156
    Par défaut
    Ca marche niquel avec le NOW().

    Merci !

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

Discussions similaires

  1. Utilisation des sessions avec PHP 4 et PHP 5
    Par jules78 dans le forum Langage
    Réponses: 18
    Dernier message: 18/08/2008, 16h31
  2. Mécanisme des sessions PhP
    Par segphault dans le forum Langage
    Réponses: 3
    Dernier message: 30/03/2006, 13h54
  3. incompréhension sur l'utilisation des sessions
    Par cladsam dans le forum Langage
    Réponses: 12
    Dernier message: 31/01/2006, 12h28
  4. Réponses: 5
    Dernier message: 22/08/2005, 16h48
  5. [VB.NET] Utilisation des sessions dans Session_End ?
    Par San Soussy dans le forum ASP.NET
    Réponses: 2
    Dernier message: 02/02/2005, 16h40

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