Artiphp - CMS open source et gratuit
Vous êtes ici » Accueil/Forum
Saisissez votre recherche
RechercherRechercher   Liste des MembresListe des Membres   S'enregistrerS'enregistrer    ProfilProfil 
Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 


Maintien session PHP avec AJAX

 
Poster un nouveau sujet   Répondre au sujet    Artiloo.com Index du Forum -> Scripts et Add ons des membres
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
jimro



Inscrit le: 07 Oct 2004
Messages: 6918

MessagePosté le: Sam 22 Mar 2008 15:55    Sujet du message: Maintien session PHP avec AJAX Répondre en citant

Bonjour,

Peut-être une solution avec AJAX pour maintenir la session PHP lors de la rédaction d'articles longs (solution que j'ai sous le coude depuis quelques mois, mais que je n'ai jamais eu l'occasion de tester en situation réelle).

Créez les fichiers suivants et placez-les dans le répertoire outils/ :

session_maintien_ajax.php
Code:
<?php
/**
 * Permet le maintien de la session PHP (lors de la rédaction d'un article par exemple)
 * Requis : Javascript doit être activé
 * Usage :
 * dans un fichier PHP et après session_start();
 * inclure entre <head> et </head> la ligne suivante :
 *      <?php include('../outils/session_maintien_ajax.php'); ?>
 * et juste après la balise <body>, insérer :
 *      <div id="message_maintien_session" style="display:none;"></div>
 */

// Variables de langue à personnaliser
$LG_SESSION_MAINTIEN = 'Maintien session...';
$LG_SESSION_PERDUE = 'Session perdue !';
// Attention, en cas de modification, tenir compte le cas échéant des \\n
// qui sont nécessaires, dans le contexte, pour les retours à la ligne dans le code Javascript
$LG_SESSION_PERDUE_ALERTE = "Votre session a expiré.\\nFaites une copie de votre travail\\navant de vous reconnecter !";
$LG_SESSION_ERREUR_ALERTE = "Erreur lors de la récupération des données XML :\\n";

// Autres variables à personnaliser
$duree_affichage = 1500; // en millisecondes
// un intervalle de 2 min (soit 120000 millisecondes) ou de 2,5 min convient généralement (doit être inférieur à la durée de la session)
$intervalle_rafraichissement = 120000; // en millisecondes
$chemin_session_start = '../outils/session_start_ajax.php';

// Variable de session (ne pas modifier)
$_SESSION['maintien_session'] = $LG_SESSION_MAINTIEN;
?>

<script type="text/javascript"><!--//--><![CDATA[//><!--
(function() {

    maintienSession = function () {
        if (window.XMLHttpRequest) // Firefox
        XHR_object = new XMLHttpRequest();
        else if (window.ActiveXObject) // IE
        XHR_object = new ActiveXObject("Microsoft.XMLHTTP");
        else
        var contenuMessage = '';

        XHR_object.open("GET", "<?php echo $chemin_session_start; ?>", true);
        XHR_object.send(null);

        XHR_object.onreadystatechange = function (aEvt) {
            if (XHR_object.readyState == 4) {
                if (XHR_object.status == 200) {
                    var contenuMessage = XHR_object.responseText;
                    var divMessage = document.getElementById('message_maintien_session');
                    divMessage.style.position = 'absolute';
                    divMessage.style.top = '0';
                    divMessage.style.right = '0';
                    divMessage.style.padding = '3px';
                    divMessage.style.border = '0';
                    divMessage.style.display = 'block';
                    if (contenuMessage != '') {
                        divMessage.style.backgroundColor = '#0F0';
                        divMessage.innerHTML = contenuMessage;
                        setTimeout(function () {
                                divMessage.innerHTML = '';
                                divMessage.style.padding = '0';
                                divMessage.style.display = 'none';}
                            , <?php echo $duree_affichage; ?>); // en millisecondes
                    } else {
                        divMessage.style.backgroundColor = '#F00';
                        divMessage.innerHTML = "<?php echo $LG_SESSION_PERDUE; ?>";
                        // affiche une alerte pour indiquer que la session est perdue
                        alert("<?php echo $LG_SESSION_PERDUE_ALERTE; ?>");
                    }
                } else {
                    // affiche éventuelle erreur lors récupération des données XML
                    alert("<?php echo $LG_SESSION_ERREUR_ALERTE; ?>" + XHR_object.statusText);
                }
            }
        };
        setTimeout('maintienSession()', <?php echo $intervalle_rafraichissement; ?>); // en millisecondes
    };

   function addLoadListener(func) {
      if (window.addEventListener) { // Gecko, Safari, Konqueror et standard
         window.addEventListener('load', func, false);
      } else if (document.addEventListener) { // Opera 7
         document.addEventListener('load', func, false);
      } else if (window.attachEvent) { // IE Windows
         window.attachEvent('onload', func);
      }
   }

   if (document.getElementById && document.createTextNode) {
      addLoadListener(maintienSession);
   }

})();
//--><!]]></script>


session_start_ajax.php
Code:
<?php
session_start();
if (!empty($_SESSION['maintien_session'])) {
    echo $_SESSION['maintien_session'];
}
?>




EXEMPLE D'IMPLÉMENTATION

dans le fichier artzone/header.php
AJOUTER
Code:
<?php include('../outils/session_maintien_ajax.php'); ?>

AVANT
Code:
</head>


JUSTE APRES la balise
Code:
<body>

AJOUTER
Code:
<div id="message_maintien_session" style="display:none;"></div>


Adapter :
- le chemin en fonction de l'endroit où les fichiers session_maintien_ajax.php et session_start_ajax.php sont placés ;
- la durée de l'intervalle de rafraîchissement qui doit être inférieur à la durée de la session PHP.


Si certains d'entre vous peuvent tester, dites-nous si c'est utile.


jimro

EDIT jimro >> Code de session_maintien_ajax.php complété (ajout de boîtes d'alerte si perte de session ou erreur AJAX)


Dernière édition par jimro le Dim 23 Mar 2008 9:44; édité 3 fois
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
achtungbaby



Inscrit le: 06 Mai 2004
Messages: 1466

MessagePosté le: Sam 22 Mar 2008 16:11    Sujet du message: Répondre en citant

Hyper intéressant,

le nombre de fois où je me suis fait piégé à taper un article et le perdre...

Donc je viens de l'installer, et je teste de suite.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
achtungbaby



Inscrit le: 06 Mai 2004
Messages: 1466

MessagePosté le: Sam 22 Mar 2008 16:37    Sujet du message: Répondre en citant

Bon, deux tests effectués : Cession saisie de dossier en cours laissé en plan durant 15 minutes. L'enregistrement du dossier a bien eu lieu.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
jimro



Inscrit le: 07 Oct 2004
Messages: 6918

MessagePosté le: Sam 22 Mar 2008 19:47    Sujet du message: Répondre en citant

Merci achtungbaby pour les tests.

Dans mon message précédent, j'ai complété le code de session_maintien_ajax.php (ajout de boîtes d'alerte si perte de session ou erreur AJAX).


jimro
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
achtungbaby



Inscrit le: 06 Mai 2004
Messages: 1466

MessagePosté le: Sam 22 Mar 2008 20:30    Sujet du message: Répondre en citant

d'accord,

je fais la modif. Cet addon est vraiment top.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
dejese



Inscrit le: 20 Avr 2006
Messages: 321
Localisation: Aquitaine

MessagePosté le: Mer 26 Mar 2008 6:57    Sujet du message: Répondre en citant

Merci jimro.
Fonctionne parfaitement en affichant un message sur l'état de la session. Trés utile.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur MSN Messenger
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Artiloo.com Index du Forum -> Scripts et Add ons des membres Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com