[PHP]Variables session perdues après redirect

Fermé
Deallyra - 1 avril 2008 à 09:42
 ond - 10 avril 2012 à 17:00
Bonjour,

je développe actuellement un Intranet pour une mairie, et je rencontre un problème quand je consulte la partie admin (que j'ai développée) mais exclusivement sur le serveur, c'est-à-dire que totu fonctionne en local.

Je m'explique, on arrive sur la page d'admin, un lien a cliquer pour s'identifier, une popup qui s'ouvre, on saisit un login / mdp dans ce popup puis on envoie, les données sont envoyées par méthode post vers une page qui vérifie les infos par rapport à une bdd et qui redirige vers la page principale (administration) après avoir mis les infos de l'utilisateur dans des variables de session.

En local, tout fonctionne bien, je récupère les variables de session dans ma page principale, mais sur le serveur ca ne fonctionne pas, les variables de session sont bien incrémentées avec les bonnes infos (j'ai vérifié) mais je n'arrive pas a les récupérer dans ma apge principale.

Je n'ai rien trouvé jusqu'ici qui ait pu m'aider c'est pourquoi je poste sur ce forum, en éspèrant que vous puissiez m'aider ^^ !

Les 2 versions de PHP que j'utilise sont différentes (5 en local et 4.3 sur le serveur), est-ce que ca pourrait venir de la ?

Merci d'avance pour vos réponses !
A voir également:

9 réponses

Utilisateur anonyme
1 avril 2008 à 14:49
d'autres choses (toujours avec mes codes)

<meta http-equiv='Refresh' content='2;URL=page_admin.php?<?php echo "log=".$_SESSION['log']."&psw=".$_SESSION['psw'];?>'>

ceci permet de passer les variables de session en GET et donc de les récupérer.
if (isset($_GET['log'])) {
//echo "<pre>";print_r($_GET);echo "</pre>";
$_SESSION['log']= $_GET['log'];
$_SESSION['psw']= $_GET['psw'];
}



enfin un autre truc lié à http-equiv

trouvé sur le net
Lorsqu'on fait une redirection avec la fonction php "header( url )" ET que l'url que l'on choisi est absolue, c'est a dire du type
"https://openclassrooms.com/fr/", ALORS php choisi de NE PAS transmettre les variable de session CAR il (php) considère que ca comporte des dangers, et que cette demande d'url à votre serveur peut venir d'un autre site : craker, pirateur etc...

SI vous avez un url relatif, la, php conserve les sessions CAR la demande vient forcément d'un client du site.
7
argggh ça fait 2 heures que je galerais... j'ignorais le souçi avec les url absolue !
merci ;)
0
Utilisateur anonyme
1 avril 2008 à 12:00
En fait je bidouille pour trouver le problème.
j'ai donc créer des fichiers que je suppose faire la même chose que toi.
je mets des session_start, des session_unset et des session_destroy pour voir mais rien n'y fait.

Je pense que le problème vient du fait de ce popup (window.open).
admin.php est dans une appli (appli1),
on ouvre une fenêtre(popup = autre appli (appli2) dans laquelle on fait la saisie de variables, dans cette même fenêtre on crée les variables de session
puis on retourne dans admin.php soit appli1

les variables de session ne passent pas d'une appli à l'autre.
ce qui n'est pas le cas quand on enchaine ou qu'on inclut des script php, on reste alors dans la même appli.


si là où j'initialise mes variables de session, je fais un include d'un fichier qui fait print_r($_SESSION), il récupère bien ces variables.
ci après les fichiers créés pour les tests
-----page_admin.php ----<html>

<SCRIPT language='javascript'>
function ouvre_login()
{
window.open('extr.html','Login','menubar=no, status=no, scrollbars=no, menubar=no, width=300, height=200');
}
</SCRIPT>

<body>
<?php

//session_start();
if (!isset($_SESSION['log'])) {
?>
<a href="#" onClick='ouvre_login();'>M'identifier</a>
<br>
Page initiale
<br>

<?php
}
else {
echo "page principale";
echo $_SESSION['log'];
//echo "vous êtes connectée en : ".$_SESSION['log']."<br>";
}
?>
</body>
</html>

------ extr.html -------
<html>
<form method='post' action='extr.php'>
login<input type ='text'name='login'><br>
pw <input type='text' name='pwd'><br>
<input type='submit' value='ok'>
</form>
</html>



---initialise var session ------------<?php
extract($_POST);

$_SESSION['log']= $login;
$_SESSION['psw']= $pwd;

include ('bidouille.php');
?>

<meta http-equiv='Refresh' content='2;URL=page_admin.php'>
</html>


--bidouille.php----
<?php
print_r($_SESSION);
?>
1
Deallyra Messages postés 3 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 1 avril 2008 1
1 avril 2008 à 13:10
Re,

Tu as peut-être raison, mais ce qui me taraude le plus, c'est que tout mon code, même si y'a une appli1 et une appli2, fonctionne parfaitement en local. Mais pas quand je l'uploade sur le serveur, c'est la que le bas blesse et que ma page_admin.php ne parvient pas a récupérer mes variables de session. Il est là mon vrai problème ^^ Pourquoi ca fonctionne sur l'un et pas sur l'autre ?

Enfin, grand merci pour tout le temps que tu perds en essayant de m'aider :P Je vais peut-être tenter autre chose...

\o/
1
Utilisateur anonyme
1 avril 2008 à 14:05
sans doute la différence entre php4 et php5 car mes tests sont fait en php 4.

ce que je peux te dire sur les variables de session entre php4 et php5 c'est l'un les passe par variable (php4) et l'autre par pointeur (php5).
ce ce fait si en php 5 tu as :
$toto = 1;
$_SESSION['toto'] = $toto;

et que plus loin tu fasses $toto = 2;
la variable de session est, elle aussi modifiée sans avor refait l'affectation.
0
Utilisateur anonyme
1 avril 2008 à 10:03
Bonjour,

C'est possible que la différence de version ait une incidence.
mais quand même

une certirude cependant c'est que les variables de session ne fonctionne pas de la même manière en 5 et en 4.

Pourquoi une popup et pas un formulaire ?
pouvez-vous donner une partie du code ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tout d'abord, merci de votre aide.

C'est une popup avec un formulaire dedans ;), je l'ai fait de cette manière car c'est ce qu'on m'a demandé et que c'est, il est vrai, plus esthétique !

Pour le morceau de code :

Contenu de la page de mon popup :

<form action='redirect.php' method='post' name='form1' target='administration' onsubmit='self.close()'>

<h4>Connexion administrateur</h4>
<p><b class='texte_news'>Login :
<input name='login' type='text' on/>
</b><b class='texte_news'><p>Mot de passe :
<input name='mdp' type='password' />
<p>
<input name='submit' type='submit' value='Envoyer'/>

</b>
</form>

redirect.php étant la page qui vérifie que les informations entrées correspondent à celles de la bdd et qui incrémente les variables de session.
La target du form est la page principale que j'ai donc nommé 'administration'.


Contenu de la page redirect.php :

session_start();
$loginOK = false;

if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['mdp'])) )
{

extract($_POST);

$login=$_POST['login'];

// On va chercher le mot de passe afférent à ce login
$sql = "SELECT mdp, accueil_news_dates, rh_news_dates, agenda_maire, location_salle, location_voiture_portable FROM login_mdp WHERE login = '".addslashes($login)."'";
$req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);

// On vérifie que l'utilisateur existe bien
if (mysql_num_rows($req) > 0)
{
$data = mysql_fetch_assoc($req);

// On vérifie que son mot de passe est correct
if ($mdp == $data['mdp'])
{
$loginOK = true;
}
}
}

// Si le login a été validé on met les données en session
if ($loginOK)
{
$_SESSION['login'] = $login;
$_SESSION['mdp'] = $data['mdp'];
$_SESSION['accueil_news_dates'] = $data['accueil_news_dates'];
$_SESSION['rh_news_dates'] = $data['rh_news_dates'];
$_SESSION['agenda_maire'] = $data['agenda_maire'];
$_SESSION['location_salle'] = $data['location_salle'];
$_SESSION['location_voiture_portable'] = $data['location_voiture_portable'];
?>
<meta http-equiv="Refresh" content="2;URL=page_admin_test.php">
<?php
}
else
{
echo '<b class="rouge">Une erreur est survenue, veuillez réessayer !
<p><input type="button" value="Retour" onclick="history.go(-1)"</b>';
}

mysql_close();
?>

Dans ma page admin, je ne pense pas qu'il y aura quelquechose qui pourra vous aider, j'affiche juste dedans des morceaux différents de page selon les droits ($_SESSION['accueil_news_dates'] etc...) définis pour cet utilisateur-là !
0
Utilisateur anonyme
1 avril 2008 à 10:40
re bonjour,

je ne trouve rien ici.
je reprends;
une page principale appelle le popup-formulaire qui renvoit sur redirect.php lequel initialise les variables de session.

pouvez-vous me donner la ligne de la page princiaple qui appelle le formulaire

et
la ligne de retour de redirect.php vers la page principale (à moins que cela soit des include)
0
Oui, vous avez tout compris ^^

La ligne de la page qui appelle le formulaire est la suivante :

<a onClick='ouvre_login();' class='planning'>M'identifier</a>

ouvre_login() correspond à cette fonction-là :

<SCRIPT language='javascript'>
function ouvre_login()
{
window.open('login_admin.html','Login','menubar=no, status=no, scrollbars=no, menubar=no, width=300, height=200');
}
</SCRIPT>

La ligne de retour de redirect.php vers la page principale est :

<meta http-equiv='Refresh' content='2;URL=page_admin.php'>
0
Utilisateur anonyme
1 avril 2008 à 11:17
Les tests que je fais me renvoient :

Page principale
Notice: Undefined variable: _SESSION in page_admin.php on line 14 vous êtes connectée en :
ligne qui est (echo "vous êtes connectée en : ".$_SESSION['log']."<br>";)

(et ce dans la fenêtre popup)

Il est étonnant que je n'aie pas le $ de cette variable. avez vous un message d'erreur ?
0
Deallyra Messages postés 3 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 1 avril 2008 1
1 avril 2008 à 11:30
Non je n'ai pas de message d'erreur sinon j'aurai de suite vérifié d'où ca venait !

Et comment peut-il y avoir une erreur de session dans la popup étant donné que quand on l'ouvre c'est pour s'identifier, et de ce fait aucune session n'est encore démarrée...

Quand on ouvre la page_admin.php en étant identifié, on ne voit même pas le lien qui ouvre la popup et nous propose de nous identifier ! On le voit seulement si il n'y a aucune session de démarrée.

La popup qui s'ouvre est login_admin.html, donc il ne peut pas y avoir de session dedans étant donné que les sessions sont du php. (ou alors y'a un truc qui m'échappe ;))

Merci encore de ton aide et du temps que tu prends pour m'aider !
0
Deallyra Messages postés 3 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 1 avril 2008 1
1 avril 2008 à 15:59
Rebonjour, oui j'étais tombé là-dessus aussi, et en effet j'utilise des url relatives, c'est plus logique dans mon cas, et je n'utilise pas de redirection de type header(url) ! Merci encore de ton aide mais j'avais déjà pas mal tourné sur les forums pour trouver une solution à mon problème !
-------
\o/
0