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 :

Afficher la date du dernier passage


Sujet :

Langage PHP

  1. #1
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut Afficher la date du dernier passage
    Bonjour,

    Je souhaiterai afficher la date du dernier passage du visiteur via la mise en place d'un cookie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $ctime = strftime("%a %b %d %H:%M:%S");
    $expires = 365*24*3600;
    setcookie("lastlogin", "$ctime", time()+$expires, "/", "127.0.0.1", 0);
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    if (isset($_COOKIE["lastlogin"]))
    {
        print ($_COOKIE['lastlogin']);
    }
    else
    {
        print ('This is your first login');
    }
    ?>
    J'ai l'impression qu'il m'affiche l'heure actuelle

    Pourriez-vous me donner un petit coup de main s'il vous plaît ?

    Merci

  2. #2
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 889
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 889
    Points : 16 336
    Points
    16 336
    Par défaut
    Tu as une redirection ou quelque chose dans ce style entre tes deux morceaux de code ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    En version codé à la truelle et d'après ce que j'ai cru comprendre du problème. Il suffit juste de récupérer la valeur du cookie avant de le réactualiser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $lastLogin = @$_COOKIE['lastlogin'];
     
    $ctime = strftime("%a %b %d %H:%M:%S");
    $expires = 365*24*3600;
    setcookie("lastlogin", "$ctime", time()+$expires, "/", "127.0.0.1", 0);
     
    echo empty( $lastLogin ) ? 'première connex' : $lastLogin;
    Je sais que la cagouille va faire bondir. Cependant en l'occurrence, soit ça affecte la valeur du cookie, soit null. Ca évite un if( isset(... )) sans conséquences et ça allège un peu le code.

  4. #4
    Membre éclairé
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Points : 687
    Points
    687
    Par défaut
    Salut,

    avec le code que tu as écrit, le cookie est systématiquement créé, et par conséquent affichera toujours l'heure actuelle. Il te suffit de mettre une condition pour que cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    if (isset($_COOKIE["lastlogin"]))
    {
        print ($_COOKIE['lastlogin']);
    }
    else 
    {
        print ('This is your first login');
        $ctime = strftime("%a %b %d %H:%M:%S");
        $expires = 365*24*3600;
        setcookie("lastlogin", "$ctime", time()+$expires, "/", "127.0.0.1", 0);
    }
    ?>
    A++

  5. #5
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 889
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 889
    Points : 16 336
    Points
    16 336
    Par défaut
    @djayp : Dans ton cas, le cookie n'est créé qu'une seule fois, donc tu n'as pas la date du dernier accès, mais celui du premier.

    Le code d'Olivier Regnier fonctionne très bien, à condition qu'il n'y ai pas de redirection/actualisation de page entre les deux codes.

    En effet, selon la doc PHP :
    Citation Envoyé par La doc PHP sur les cookies
    Les cookies ne seront accessibles qu'au chargement de la prochaine page, ou au rechargement de la page courante. Pour tester si un cookie a été défini avec succès, vérifiez la présence du cookie au prochain chargement de la page avant que le cookie n'expire.
    Donc au moment où il fait un setcookie(), celui-ci est écrit mais pas lu directement, juste au prochain rechargement de la page, ou, le cas qui nous intéresse, à la prochaine visite.

  6. #6
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    Le code d'Olivier Regnier fonctionne très bien, à condition qu'il n'y ai pas de redirection/actualisation de page entre les deux codes.
    Connaissez-vous une solution pour le cookie ne s'actualise pas lors d'une redirection voir actualisation.

    A mon avis, l'utilisation d'une session aura le même effet vu que la structure du site est la suivante:

    index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $ctime = strftime("%a %b %d %H:%M:%S");
    $expires = 365*24*3600;
    setcookie("lastlogin", "$ctime", time()+$expires, "/", "127.0.0.1", 0);
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    avant.........
    
    <?php 
    include("header.inc.php");
    ?>
    après.........
    header.inc.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    avant.........
    Last login: <?php if (isset($_COOKIE["lastlogin"])) { print ($_COOKIE['lastlogin']); } else { print ('This is your first login'); } ?>
    après.........
    A moins que vous ayez une solution ?

    Merki

  7. #7
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 889
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 889
    Points : 16 336
    Points
    16 336
    Par défaut
    Ben la session est la solution en l'occurrence. Tu vérifies si une session existe, dans ce cas tu ne (re)créés pas le cookie, sinon tu le (re)créés.

  8. #8
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    Ben la session est la solution en l'occurrence. Tu vérifies si une session existe, dans ce cas tu ne (re)créés pas le cookie, sinon tu le (re)créés.
    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
    <?php
    session_start();
    
    if (isset($_SESSION['lastlogin']))
    {
    
        heu je ne vois pas du tout le lien avec la session
    }
    else
    {
        $ctime = strftime("%a %b %d %H:%M:%S");
        $expires = 365*24*3600;
        setcookie("lastlogin", "$ctime", time()+$expires, "/", "127.0.0.1", 0);
    }
    ?>
    Il faut que tu éclaires ma lanterne

  9. #9
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    C'est assez simple, si on reprend tout depuis le début :

    • Le protocole HTTP ne connait pas les sessions. Pour lui, chaque requête, même si elle émane d'un client déjà connecté, est une nouvelle requête, et il ne se souvient pas des données qu'il a déjà envoyées... dur dur le travail à la chaîne
    • La solution consiste en les sessions, qui permet d'identifier le visiteur via une variable SESSION_ID placée dans les entêtes HTTP. De cette façon le serveur sait à qui il a affaire.
    • Ce schéma est représentatif du problème : le script ne sait pas quand ré-écrire le cookie, il le ré-écrit donc à chaque fois.


    Donc une solution envisagable serait de :
    • A l'ouverture de la session, récupérer le contenu du cookie s'il existe.
    • Définir une variable de session qui va stocker cette donnée, pour qu'elle reste la même durant toute la visite.
    • A l'ouverture de chaque page, enregistrer la date/heure courante dans le cookie.


    Ce qui nous donne grosso modo :
    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
     
    <?php
    session_start();
    if (empty($_SESSION['lastLogin'])
    {
        if (isset($_COOKIE['lastlogin']))
        {
            $_SESSION['lastLogin'] = $_COOKIE['lastlogin'];
        }
        else
        {
           $_SESSION['lastLogin'] = -1;
        }
    }
    $ctime = strftime("%a %b %d %H:%M:%S");
    $expires = 365*24*3600;
    setcookie("lastlogin", "$ctime", time()+$expires, "/", "127.0.0.1", 0);
    et pour afficher l'heure du dernier passage, et bien tu appelles $_SESSION['lastLogin'] au lieu de $_COOKIE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Last login: <?php if ($_SESSION['lastLogin'] != -1) { print ($_SESSION['lastlogin']); } else { print ('This is your first login'); } ?>
    Voilà peut-être pas la meilleure solution, mais ça devrait marcher, j'ai pas testé.

    Edit. Amélioration du code

  10. #10
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Dans un premier temps, merci beaucoup pour ton coup de main

    La première exécution est nickel, le message "This is your first login" s'affiche.

    Le contenu à cet instant précis du cookie est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lastlogin: Tue+Aug+18+08%3A43%3A36
    PHPSESSID: e6439fa3c5e5613364c1dcfe43a419bb
    et de PHPSESSID:
    Après fermeture et redémarrage du navigateur, voici le contenu du cookie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lastlogin: Tue+Aug+18+08%3A50%3A55
    PHPSESSID: ce2c88df63bf0988bfb103e82192c484
    et de PHPSESSID:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lastLogin|s:19:"Tue Aug 18 08:43:36";
    Si je ne me trompe pas, il devrait m'afficher le contenu du PHPSESSID ci-dessus, sauf qu'à l'affichage sur le navigateur "Last Login: " est vide.

    Qu'en penses-tu ?

    Merki

  11. #11
    Membre éclairé
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Points : 687
    Points
    687
    Par défaut
    Salut,

    tu peux essayer avec ce bout de code, ça devrait fonctionner :

    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
     
    <?php
    session_start();
     
    $ctime = strftime("%a %b %d %H:%M:%S");
    $expires = 365*24*3600;
     
    if(isset($_SESSION['lastlogin']) AND !empty($_SESSION['lastlogin'])) {
     // le visiteur est deja sur le site, on recupere la date de derniere visite dans les sessions
     $lastlogin=$_SESSION['lastlogin'];
    }
    elseif(isset($_COOKIE['lastlogin']) AND !empty($_COOKIE['lastlogin']))
    {
     // le visiteur arrive pour la n-ième fois sur le site
     $lastlogin=$_COOKIE['lastlogin'];
     $_SESSION['lastlogin']=$lastlogin;
     
     // on reactualise le cookie avec la date du jour
     setcookie("lastlogin", $ctime, time()+$expires, "/");
    }
    else {
     // c'est la toute premiere visite
     $lastlogin='This is your first login';
     $_SESSION['lastlogin']=$lastlogin;
     
     // on cree le cookie
     setcookie("lastlogin", $ctime, time()+$expires, "/");
    }
     
    echo $lastlogin;
    ?>
    A++

  12. #12
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Le code de de mistertbo est correct c'était simplement un problème de casse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Last login: <?php if ($_SESSION['lastLogin'] != -1) { print ($_SESSION['lastLogin']); } else { print ('This is your first login'); } ?>
    Le "L" était en minuscule.

    Merci à tous de votre patience

  13. #13
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 43
    Points : 38
    Points
    38
    Par défaut
    Ooops, je suis allé un peu trop vite... à copier/coller pour gagner du temps, on en perd au final ^^'

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

Discussions similaires

  1. [Dates] Afficher La date au format fr
    Par toure32 dans le forum Langage
    Réponses: 5
    Dernier message: 07/11/2005, 23h40
  2. afficher une date d'1 monthcalendar d'un datetimepicker
    Par bertrand_declerck dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/07/2005, 10h00
  3. [JTable] Afficher une date dans un tableau / Renderer
    Par isak dans le forum Composants
    Réponses: 3
    Dernier message: 11/07/2005, 17h09
  4. Requête : dernier passage
    Par remika dans le forum Langage SQL
    Réponses: 5
    Dernier message: 22/06/2005, 14h40
  5. [Upload] Date de dernier accès aux fichiers...
    Par John@EuroDevz dans le forum Langage
    Réponses: 10
    Dernier message: 08/04/2005, 10h57

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