Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/04/2011, 11h53   #1
Invité régulier
 
Inscription : avril 2011
Messages : 23
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 23
Points : 7
Points : 7
Par défaut Empecher une page de s'afficher plusieurs fois

Bonjour,
Avec les variables sessions j'essaie d'empecher un utilisateur d'ouvrir deux fois la même page dans un autre onglet.
Seulement le problème c'est que $_SESSION['visite'] est automatiquement remis à 0 lorsque j'ouvre un autre onglet or d'après ce que j'ai compris les variables de sessions sont liées aux navigateurs et non aux onglets.
Voici le code en question ...
Merci d'avance

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if ($_GET['p'] == "validationpointentier.php") {
?>
            <script type="text/javascript">
                function visiter()
                {
                <?php $_SESSION['visite'] = 0; ?>;
                }
            window.onbeforeunload = function (){visiter()};
            </script>
<?php
            if ($_SESSION['visite'] != 1) {
                include("./controleur/$_GET[p]");
                $_SESSION['visite'] = 1;
            } else {
                echo "Vous ne pouvez pas visiter deux annonceurs en même temps";
            }
}
myred est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 11h59   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Tu ne peux pas mettre du PHP dans une fonction Javascript.
Il faudrait passer par Ajax.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 15h02   #3
Invité régulier
 
Inscription : avril 2011
Messages : 23
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 23
Points : 7
Points : 7
Oui cette partie ne fonctionnait pas car le php et exécuté sur le serveur et le JavaScript sur le client, mais le problème ne venait quand même pas de la.
Après plusieurs essais je n'ai toujours pas réussi à faire marcher les variables de sessions d'un onglet à l'autre.
Du coup j'ai voulu passer par la base de donnée. J'en reviens donc au topic juste au dessus de moi ^^ sauf que je ne voudrais pas utilisé d'ajax mais juste du java script.

J'ai donc mon fichier java script qui s'execute quand la page se ferme :
Code :
1
2
3
4
5
6
7
<script type="text/javascript">
        function visiter()
        {
            window.open('./controleur/regarde.php');
        }
        window.onbeforeunload = function (){visiter()};
    </script>

et mon fichier php regarde.php
Code :
1
2
3
4
5
6
7
8
9
<?php
session_start();
 
$requete = "Update ...";
$result = $db->query($requete);
?>
<script type="text/javascript">
    window.close()
</script>

Cependant ça ne fonctionne pas, et je ne vois pas vraiment l'erreur ...
myred est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 15h06   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Citation:
mais le problème ne venait quand même pas de la
si puisque ta variable en session était toujours remise à zéro.

Dans ton second code, je ne vois pas la partie qui empêche l'onglet.

Je ne vois pas pourquoi tu ne veux pas utiliser Ajax ... ce que tu fais est un pseudo-ajax-moche.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 15h20   #5
Invité régulier
 
Inscription : avril 2011
Messages : 23
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 23
Points : 7
Points : 7
@code 1
J'ai du mal à comprendre pourquoi il serait toujours remis à 0, mais tu as raison vu que c'était le cas ^^

@code 2
En fait j'ai mis une variable dans la base de donnée. Donc dès qu'il clic je passe la variable à true, et je fais un teste pour savoir avant d'afficher la page si c'est a true ou non. Bref ça fonctionne, sauf que mon problème est de repasser cette variable à false grâce au code que j'ai mis ci dessus.

Et je n'utilise pas ajax car je ne connais pas du tout, j'ai regarder sur le net et je me suis très vite perdu, la méthode est surement moche mais au moin je la comprends ^^, sauf qu'elle ne fonctionne pas, j'ai l'impression qu'on ne peux pas ouvrir une page sur l'événement window.onbeforeunload ...
myred est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 15h27   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
@code 1
Code :
<?php $_SESSION['visite'] = 0; ?>;
Cette ligne est toujours exécutée au début du code.

Pour ajax :
http://siddh.developpez.com/articles/ajax/
En resumé, l'objet javascript xmlhttprequest te permet d'executer des scripts PHP à la demande de javascript (donc sans faire des ouvertures/fermetures de page).
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 15h34   #7
Invité régulier
 
Inscription : avril 2011
Messages : 23
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 23
Points : 7
Points : 7
@code1
Hmm oki, merci


Bon si l'ajax est la seul solution, je vais me plonger dedans
myred est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 15h49   #8
Invité régulier
 
Inscription : avril 2011
Messages : 23
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 23
Points : 7
Points : 7
Évidemment ça ne fonctionne pas du premier coup ^^.
Donc en gros j'ai copier coller leur exemple en remplaçant juste la page que je souhaite ouvrir.

Code JS :
Code :
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
<script type="text/javascript">
        function getXhr(){
            var xhr = null;
            if(window.XMLHttpRequest) // Firefox et autres
                xhr = new XMLHttpRequest();
            else if(window.ActiveXObject){ // Internet Explorer
                try {
                    xhr = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    xhr = new ActiveXObject("Microsoft.XMLHTTP");
                }
            }
            else { // XMLHttpRequest non supporté par le navigateur
                alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
                xhr = false;
            }
            return xhr
        }
 
        function visiter()
        {
            var xhr = getXhr()
            xhr.onreadystatechange = function(){
                // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
                if(xhr.readyState == 4 && xhr.status == 200){
                    alert(xhr.responseText);
                }
            }
 
            xhr.open("GET","./controleur/regarde.php",true);
            xhr.send(null);
        }
        window.onbeforeunload = function (){visiter()};
    </script>
Code PHP :


Code :
1
2
3
4
5
6
<?php
session_start();
$requete = "update ....";
$result = $db->query($requete);
echo "FINIS";
?>
Donc logiquement je devrais voir apparaître "Finis" dans une boite de dialogue. Mais je ne recrois rien, et le update ne c'est pas fait non plus. Le problème viendrait donc du côté de l'ajax ...
myred est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h07.


 
 
 
 
Partenaires

Hébergement Web