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 07/07/2006, 17h17   #1
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
Par défaut Pseudo-Frames et Session

Bonjour,

je travail actuelement sur un site en pseudo frame.

Mon problème est que avant d'acceder au site en pseudo-frame, il faut s'identifié.

J'ai donc rélaisé un script. Je peut m'inscire, me connecter pas de problème.

Dans tout les script de mon site j'utilise ensuite l'id du joueurs que j'ai passé en variable de sessions comme ceci: $_SESSION['id']. Seulement, je pense que c'est du au pseudo frame, cette varaible est toujours nulle.

J'ai donc essayé de mettre des session_start dans tout mes fichiers, en les plaçant avant la balise body, mais à chaque fois j'ai une notice comme quoi une session existe déjà et que la nouvelle sera ignorée.

Donc ma session existe bien mais alors pourquoi mes variable de sessions sont toujours vide.

Est-ce qu'il existe une astuce pour que pseudo-frame et sessions fassent bon ménage ?

Merci d'avance
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h17   #2
Rédactrice
 
Avatar de xave
 
Inscription : mai 2002
Messages : 860
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : mai 2002
Messages : 860
Points : 824
Points : 824
Comment tu sauvegardes tes valeurs dans la session?

Pseudo frame et session font bon ménage!
__________________
Les règles du forum
Cours et tutoriels php
Développements web (CSS, (X)HTML,javascript, etc...)
Cours et tutoriels MySQL
Tutoriels Ajax
Initiation à PHP-GTK1


Il n'est point de bonheur sans liberté, ni de liberté sans courage. Péricles
xave est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h24   #3
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
Bin pour être plus simple, voilà l'initialisation de ma session:

Code :
1
2
3
session_start();
$_SESSION['login'] = $_POST['login'];
$_SESSION['id'] = $data['id'];
Et ensuite je fait un header pour rediriger vers la page de jeu comme ceci:

Code :
1
2
header('Location: play.php');
exit();
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h25   #4
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
As-tu vérifié la valeur retournée par $data['id']?
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h25   #5
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
et y a quelque chose dans $data['id']; ?
tu fais bien un session_start au début des autres pages ?
tu as register_globals à ON ou OFF ?
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h29   #6
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
Alors register_global est a on

Et oui, la valeur renvoyée par Mysql est bonne.

EDIT 1: Si je rajoute des session_start au debut des autre page, j'ai le problème que j'ai expliqué en haut.
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h32   #7
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
Pourrais-tu nous montrer le code de ton script qui pose problème?
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h34   #8
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
juste si register_global est a ON, $id = $_SESSION[id], donc si a un moment tu utilises $id ou autre, ta variable de session va disparaitre.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h35   #9
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
Oui sans problème, mais en fait, c'est tout les script ou j'utilise une variable du type $_SESSION['login'].

Voici un exemple:

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
<?php
// on teste si notre paramètre existe bien et qu'il n'est pas vide
if (!isset($_GET['id_message']) || empty($_GET['id_message'])) {
    echo 'Aucun message reconnu.';
}
else {
	require_once("include/config.php");
    $base = mysql_connect ($serveur, $username, $password); 
    mysql_select_db ($nombase, $base);
 
    // on prépare une requete SQL selectionnant la date, le titre et l'expediteur du message que l'on souhaite lire, tout en prenant soin de vérifier que le message appartient bien au membre connecté
    $sql = 'SELECT titre, date, message, user.login as expediteur FROM messages, user WHERE id_destinataire="'.$_SESSION['id'].'" AND id_expediteur=user.id AND messages.id="'.$_GET['id_message'].'"';
    // on lance cette requete SQL à MySQL
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    $nb = mysql_num_rows($req);
 
    if ($nb == 0) {
        echo 'Aucun message reconnu.';
    }
    else {
        // si le message a été trouvé, on l'affiche
        $data = mysql_fetch_array($req);
        echo $data['date'] , ' - ' , stripslashes(htmlentities(trim($data['titre']))) , '</a> [ Message de ' , stripslashes(htmlentities(trim($data['expediteur']))) , ' ]<br /><br />';
        echo nl2br(stripslashes(htmlentities(trim($data['message']))));
 
        // on affiche également un lien permettant de supprimer ce message de la boite de réception
        echo '<br /><br /><a href="supprimer.php?id_message=' , $_GET['id_message'] , '">Supprimer ce message</a>';
    }
    mysql_free_result($req);
    mysql_close();
}
?>
EDIT 1:

Je viens de mettre register_globals à off en local et j'ai le même problème.
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h40   #10
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
Si tu ne mets pas de session_start() il ne pourra pas récupérer la valeur de $_session['id'] ou des autres variables de session.
Comment déclares-tu tes variables de session?
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h45   #11
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
En fait je ne met pas de session_start() car comme je l'ai dit plus haut, j'utilise des pseudo frame et qui si je le remet, j'ai l'erreur suivante:

Code :
[Fri Jul 07 17:43:35 2006] [error] [client 127.0.0.1] PHP Notice:  A session had already been started - ignoring session_start() in E:\\www\\medievalheros\\max\\profil.php on line 4, referer: http://127.0.0.1/max/play.php
Mes variable sont déclaré dans le fichier de connexion, de cette manière:

Code :
$_SESSION['id'] = $_POST['id'];
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h46   #12
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
c'est pas pour t'embeter, mais bon les frames c'est pas top.

Apres je vois pas trop d'ou vient ton probleme, mais tu peux faire un print_r($_SESSION); juste apres ton session_start(); et voir quand elles disparaissent ...
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h51   #13
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
Bon et bien j'ai fait ce que tu m'a dit dans toute mes pages et à chaque fois j'obtient ça:

Array ( [login] => Pahcixam [id] => 1 )

Donc je comprend plus,

Mes valeurs sont bien là

Alors pourquoi mes requêtes merdent ?
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h53   #14
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
Ca c'est une autre histoire !!

Tein tein teinnnnnnnnn !!! (petite note de musique ...)
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h58   #15
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
Par exemple, dans ce code là, le print_r me renvoi ce que j'ai dit tout à l'heure, donc j'ai bien mes valeur de session.

Et à l'execution de ce code:

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
 
print_r($_SESSION);
 
?>
<?php
 
if (isset($_POST['go']) && $_POST['go'] == 'Envoyer') {
    if (empty($_POST['destinataire']) || empty($_POST['titre']) || empty($_POST['message'])) {
        $erreur = 'Au moins un des champs est vide.';
    }
    else {
        require_once("include/config.php");
		$base = mysql_connect ($serveur, $username, $password); 
		mysql_select_db ($nombase, $base);
 
        // si tout a été bien rempli, on insère le message dans notre table SQL
        $sql = 'INSERT INTO messages VALUES("", "'.$_SESSION['id'].'", "'.$_POST['destinataire'].'", "'.date("Y-m-d H:i:s").'", "'.addslashes($_POST['titre']).'", "'.addslashes($_POST['message']).'")';
        mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
 
        mysql_close();
 
		header('Location: play.php?page=messagerie');
        exit();
    }
}
?>
 
<html>
<head>
<title>Espace membre</title>
</head>
<body>
Envoyer un message :<br /><br />
 
<?php
require_once("include/config.php");
$base = mysql_connect ($serveur, $username, $password); 
mysql_select_db ($nombase, $base);
 
// on prépare une requete SQL selectionnant tous les login des membres du site en prenant soin de ne pas selectionner notre propre login, le tout, servant à alimenter le menu déroulant spécifiant le destinataire du message
$sql = 'SELECT user.login as nom_destinataire, user.id as id_destinataire FROM user WHERE id <> "'.$_SESSION['id'].'" ORDER BY login ASC';
// on lance notre requete SQL
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$nb = mysql_num_rows ($req);
 
if ($nb == 0) {
    // si aucun membre n'a été trouvé, on affiche tout simplement aucun formulaire
    echo 'Vous êtes le seul membre inscrit.';
}
else {
    // si au moins un membre qui n'est pas nous même a été trouvé, on affiche le formulaire d'envoie de message
    ?>
    <form action="envoyer.php" method="post">
    Pour : <select name="destinataire">
    <?php
    // on alimente le menu déroulant avec les login des différents membres du site
    while ($data = mysql_fetch_array($req)) {
        echo '<option value="' , $data['id_destinataire'] , '">' , stripslashes(htmlentities(trim($data['nom_destinataire']))) , '</option>';
    }
    ?>
    </select><br />
    Titre : <input type="text" name="titre" value="<?php if (isset($_POST['titre'])) echo stripslashes(htmlentities(trim($_POST['titre']))); ?>"><br />
    Message : <textarea name="message"><?php if (isset($_POST['message'])) echo stripslashes(htmlentities(trim($_POST['message']))); ?></textarea><br />
    <input type="submit" name="go" value="Envoyer">
    </form>
    <?php
}
mysql_free_result($req);
mysql_close();
?>
</select>
 
<?php
// si une erreur est survenue lors de la soumission du formulaire, on l'affiche
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
Ma requête sql ressemble à ça:

Code :
INSERT INTO messages VALUES("", "", "2", "2006-07-07 17:58:22", "titre", "test message")
La deuxième valeur est vide !

Je comprend pas ...
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h59   #16
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
Je pense que le problème vient de l'architecture de ton application. Mais comme je ne sais pas comment elle est j'ai un peu de mal à trouver une direction de recherche.
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 18h01   #17
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
Dans ta requête essais d'inverser les simples cotes et les doubles cotes:
Remplace:
$sql = 'SELECT user.login as nom_destinataire, user.id as id_destinataire FROM user WHERE id <> "'.$_SESSION['id'].'" ORDER BY login ASC';
Par:
$sql = "SELECT user.login as nom_destinataire, user.id as id_destinataire FROM user WHERE id <> ".$_SESSION["id"]." ORDER BY login ASC";
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 18h03   #18
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
Bin, voilà, ça c'est mon fichier play.php. L'entete le pied et le menu sont en html pur.

Et puis sa appel les page, comme envoyer.php de mon post précédent.

play.php:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
<?php
session_start();
if (!isset($_SESSION['login'])) {
    header ('Location: index.php');
    exit();
}
?>
<div class="entete" >
<?php
  include('header.php');  // Nous appelons l'entete du site
?>
</div>
<table border=0>
<tr><td width=200px>
<div class="colonneGauche" >
<?php
  include('menu.htm');   // Nous appelons notre menu
?>
</div>
</td><td width=824px>
<div class="colonneDroite">
<?php
 
  // On définit le tableau contenant les pages autorisées
  // ----------------------------------------------------
  $pageOK = array('news' => 'news.php',
                  'accueil' => 'accueil.php',
				  'profil' => 'profil.php',
				  'ma_vue' => 'vue.php',
				  'equipement' => 'equipement.php',
				  'messagerie' => 'messagerie.php',
				  'envoyer' => 'envoyer.php',
				  'lire' => 'lire.php',
				  'supprimer' => 'supprimer.php');
 
  // On teste que le paramètre d'url existe et qu'il est bien autorisé
  // -----------------------------------------------------------------
  if ( (isset($_GET['page'])) && (isset($pageOK[$_GET['page']])) ) {
    include($pageOK[$_GET['page']]);   // Nous appelons le contenu central de la page
  } else {
    include('accueil.php');   // Page par défaut quant elle n'existe pas dans le tableau
  }
 
?>
</div> 
</td></tr></table>
<div class="pied">
<?php
  include('footer.php');   // Nous appelons le pied de page
?>
</div>
EDIT 1: pour cette requête là ça marche bien, c'est étonnant quand même, voilà ce qu'elle me retourne dans les deux cas:

Code :
SELECT user.login as nom_destinataire, user.id as id_destinataire FROM user WHERE id <> 1 ORDER BY login ASC
Ya de quoi s'écraser la tête contre le mur
Pahcixam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 18h09   #19
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
Citation:
Envoyé par Pahcixam
EDIT 1: pour cette requête là ça marche bien
Pour laquelle? Avec les doubles cotes ou avec les simples cotes?
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 18h13   #20
Membre habitué
 
Avatar de Pahcixam
 
Étudiant
Inscription : avril 2006
Messages : 266
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 266
Points : 108
Points : 108
Avec les double et les simple. J'ai essayé de faire ça en debut de fichier:

$idenvoyeur = $_SESSION['id']

et de remplacer dans ma requête

Toujours le même problème.

Je vois vraiment pas pourquoi il veut pas !
Pahcixam 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 10h21.


 
 
 
 
Partenaires

Hébergement Web