2009-08-23 4 views
2

Je crée un script de chat simple et j'ai la fonction killSession qui tue la session en cours et supprime l'utilisateur de la base de données. Le problème est que, après que le nom soit défini et vérifié, le formulaire de chat ne se charge pas, il tue simplement la session et retourne à l'objet loginForm(). Voici le script:

<?php 
if (!isset($_SESSION['name'])) { 
    loginForm(); // set a name for chat 
} else { 
?> 
    // chat form 

    $(window).unload(function() { 
     <?php killSession(); ?> 
    }); 

Est-il possible de déclencher killSession() uniquement après avoir actualisé ou fermé la page?

MISE À JOUR:

ne peut toujours pas comprendre. Peut-être que j'ai besoin d'une pause.

$(window).unload(function() { 
    $.get("killSession.php", { name:"test" }); // i set the name to test for testing 
}); 

est ici la page killSession.php:

session_start(); 
function killSession($name) { 
    include("config.php"); 
    mysql_query("DELETE FROM sessions WHERE name='$name'"); 
    session_destroy(); 
    header("Location: index.php"); 
} 

killSession($_GET['name']); 

Le .get de $ ne fonctionne toujours pas, alors je l'ai essayé séparemment via le navigateur. killSession.php? name = test supprimera de la base de données, mais ne supprimera pas la session.

+0

Vous oubliez d'appeler la fonction 'killSession'. Vous déclarez la fonction mais elle n'est pas appelée. Vous devriez également vous informer sur les injections SQL. – Gumbo

+0

Ah, désolé, j'ai oublié de l'ajouter ici.KillSession ($ _ GET ['name']) ; – Norbert

+0

Correction du problème de session, alors maintenant killSession.php? Name = test fonctionnera correctement. Le seul problème est maintenant le $ .get n'exécutant pas le code php. – Norbert

Répondre

5

La session est immédiatement supprimée lorsque la fonction PHP killSession est appelée. Donc, votre code va tuer la session à chaque fois qu'il est exécuté.

Ce que vous devez faire est d'appeler la fonction PHP killSession uniquement lorsque l'événement onunload est déclenché. Et appeler une fonction PHP en JavaScript n'est possible qu'avec l'envoi d'une nouvelle requête au serveur.

Vous avez donc besoin d'envoyer une requête à un script qui appelle ensuite la fonction killSession, peut-être quelque chose comme ceci:

$(window).unload(function() { 
    $.get("killSession.php"); 
}); 

Et à l'intérieur du killSession.php vous appelez alors la fonction PHP killSession.

+0

+1 - idée simple, mais je n'aurais probablement jamais pensé à cela. – karim79

+0

Cela ne semble pas fonctionner. J'ai mis une alerte à l'intérieur du déchargement pour vérifier s'il y a un problème avec cela, mais je pense qu'il a du mal à recevoir l'appel de la page. – Norbert

+0

Comment passez-vous l'identifiant de session? Si c'est par URL, vous devez ajouter l'ID de session à l'URL dans ce code JavaScript. – Gumbo

0

je recommande iframe cachée appeler script de session kill PHP ou AJAX HTTPRequest méthode GET

1

La demande ne fonctionne pas parce qu'il est async cela signifie que vous êtes javascript ne doit pas attendre que le serveur. Faire la demande synchrone fera le javascript attendre une réponse:

$(document).ready(function() 
{ 
    $(window).unload(function() 
    { 
     $.ajax 
     ({ 
      type: "GET", 
      url: "killSession.php", 
      async: false, 
      data: "name=test", 
      success: function(msg) 
      { 
       alert(msg); 
      }, 
      error: function(XMLHttpRequest, textStatus, errorThrown) 
      { 
       alert("I failed"); 
      } 
     }); 
    }); 
}); 

Sur ajax:

Je suppose que vous pensez que chaque fois que vous appelez Lieu: index.php en php (par ajax). Que le navigateur va rediriger là. Ajax ne fonctionne pas de cette façon, en fait, il fait le contraire, il contourne complètement le navigateur. C'est ce qui rend l'ajax si utile. Tout ce que vous écrivez dans index.php est ce que jQuery reçoit de la requête. Vous devez faire quelque chose avec ça. Je ne fais que l'alerter dans mon extrait à titre d'exemple. J'utilise aussi l'erreur pour voir si la demande échoue. Vous pouvez également regarder dans firebug. Vous pouvez utiliser l'onglet console pour voir toutes vos requêtes ajax. PS: Vous pouvez également démarrer la session dans le premier script PHP.

+0

J'ai enlevé le $ (window) .unload (function() {} et a laissé seulement le $ .get et il a bien fonctionné.Il a également travaillé avec votre solution Ainsi comment je peux exécuter ce script seulement quand la page est rechargé/fermé? – Norbert

Questions connexes