problème session en changeant de serveur

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : problème session en changeant de serveur

par lacfab » 08 janv. 2009, 10:35

non di dious!!!!!!!!!!!


j'avais mis session_start; au lieu de session_start(); sur BO_gestion.php ... donc forcement il retenait que dalle !!!

Merci à tout ceux qui m'ont filé un coup de main.
J'ai un autre léger soucis mais je vais d'abord passer du temps dessus avant de reposter.

par lacfab » 08 janv. 2009, 10:00

rien de tout ça ne change quelque chose à part changer le name et le nom des variables qui logiquement ne reconnait plus ni le pass ni le pseudo (mais logique puisqu'on change leur nom).

C'est vraiment un truc de psycho et celà ne peut pas venir du register_global car cette version d'espace admin ne tourne pas ni sur le nouveau, ni sur l'ancien serveur ... vais finir à l'asile moi j'ai juste passé ma journée d'hier là dessus !

par rolusseum » 07 janv. 2009, 19:56

Désolé pour la } manquante.

J'ai noté de tes phpinfo(), que tu passes d'un registry_global à on à off... Mais, je ne pense pas que cela puisse en être la cause. (A vérifier si tu le souhaite)
http://forum.hardware.fr/hfr/Programmat ... 5726_1.htm

En revanche, je me demande si ton post de la page de connexion fonctionne.
ton formulaire de connexion
[code]
<form method='post' action="BO_gestion.php">
[/code]
Faut être cohérent, soit tu mets des apostrophes soit tu mets des guillemets (exemple method ="post").
Ensuite nomme ton form, par exemple:
[code]
<form method="post" name="connexion" action="BO_gestion.php">
[/code]
Lorsque tu récupère les données du post essaye:
[php]
if (!empty($_POST['connexion'])||!empty($_POST['connexion_x'])) {
$Pseudo = $_POST['Pseudo'];
$Pass = $_POST['Pass'];
}
echo $Pseudo;
echo $Pass;
[/php]

par lacfab » 07 janv. 2009, 17:38

Je viens de faire un copié collé tel quel de ton code (en rajoutant le } manquant à la fin) et il me fait exactement la même chose.
Concernant mon sql je suis sur que ça marche puisque les messages d'erreur se font si je met n"importe quoi.

edit : j'ai aussi tenté d'enregistrer les variables de sessions comme ça mais ça change rien :
$_SESSION['Pseudo'] = mysql_result($req,0,"Pseudo");

par rolusseum » 07 janv. 2009, 17:27

Essaye via ta page de login une connexion simple. sans utiliser ta bd.

tu définis ton mot de passe et ton login (admin et toto par exemple).

[php]
<?php
session_start();
// On effectue les traitements qu'à la condition que les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['Pseudo'])) && (!empty($_POST['Pass'])) ) {

$Pseudo = $_POST['Pseudo'];
$Pass = $_POST['Pass'];
if( $Pseudo=='admin' and $Pass='toto'){
$_SESSION['Pseudo'] = $Pseudo;
$_SESSION['Pass'] = $Pass;
?>
<HTML>
<head>
<title>WALLTEK - Back Office</title>
</head>
<frameset cols="150,*" frameborder=0 border=0 framespacing=0>
<frame name=a scrolling=no noresize src="BO_menu.php">
<frame name=b src="BO_accueil.php">
</frameset><noframes>Le naviguateur n'affiche pas les frames.</noframes>
</body></HTML>
<?php
}
?>
[/php]

Si ça marche pas, essaye une éventuellement une redirection vers la page Back Office avec un header.

par lacfab » 07 janv. 2009, 15:49

Non les <? ont été remplacés depuis ... mais ça n'a rien changé.

Je teste sans loginOK de suite
edit : non rien ne change

par rolusseum » 07 janv. 2009, 15:34

Essaye sans utiliser la variable $_SESSION['LoginOK']

par dunbar » 07 janv. 2009, 15:03

Bon sorry j'avais pas remarquer le différent de ! 'ok'
Mais ci le array() est vide c'est qu'il n'y a rien en session ou pas de session simplement
Dans ton menu ci tu place <?php au lieu de <? ça ne change rien :?:

par lacfab » 07 janv. 2009, 10:48

Merci pour ta réponse :)

!= veut dire n'est pas donc c'est si $_SESSION['LoginOK'] n'est pas à OK qu'il envoie vers la page d'erreur.

Quand au print_r($_SESSION); je n'ai aucun résultat (je l'ai mis sur la page BO_menu.php) je vois les <pre></pre> sur mon code source ... snif non di diou
A noter que j'ai testé ce "nouveau script" sur mon ancien serveur (sur lequel le script d'origine marchait) et ça ne tourne plus ... étrange tout est un peu près pareil !

EDIT : alors j'ai découvert une erreur : j'avais mis session_start; au lieu de session_start(); sur mes pages suivantes mais bon ça ne change rien j'ai ça qui s'affiche :

Code : Tout sélectionner

Array ( )
Si je met le print_r directement sur la page BO_gestion là ça marche ... à n'y rien comprendre ! En fait aucune variable de session n'est gardée en mémoire sur les pages suivantes.

par dunbar » 07 janv. 2009, 10:26

Salut,
Avec une vue trés rapide, il y à un truc qui me chipote tu lui dit que
$_SESSION['loginOK'] = 'ok'; 
Donc sauf avis contraire pour moi cela veut dire que $_SESSION['loginOK'] est = a OK.
Et ici tu lui dit que
if($_SESSION['loginOK'] != 'ok'){ 
    header("location: BO_erreur.php"); 
Traduction pour moi cela veut dire ci la session est ok tu redirige vers BO_erreur.php et comme plus haut tu lui dit que les $_SESSION['loginOK'] sont = à ok et bin lui il fait simplement ce que lui demande :wink:

De plus ci tu fait
echo '<pre>';
print_r($_SESSION);
echo '</pre>';
une connecter tu devrait voir les variable de session en cours.

par lacfab » 06 janv. 2009, 17:11

BOn j'ai tout refais étape par étape et j'ai un soucis. J'arrive à accéder à mes pages si je saute la vérification de session ... aucune variable n'est conservée dans mes pages ...
page BO_identification.php
<html><head>
<title>Walltek - Back office identification</title>
</head>
<body bgcolor="#9d9d9d"><br><br><br>
<CENTER><table border=0 width=400 cellpadding=0 cellspacing=0><tr><td><table border=1 width=100% bordercolor="#ed9200" bgcolor="#ed9200">
  <tr>
    <td bgcolor='#FFFFdd' align=center>
      <CENTER><B><font size="4" face="Verdana, Arial, Helvetica, sans-serif">ACCES BACK OFFICE</FONT></B><br><br>
      <form method="post" action="BO_gestion.php">
      <font face="Verdana" size="2"><B>Identifiant : </B><br><input type="text" name="Pseudo"><br>
      <font face="Verdana" size="2"><B>Mot de passe :</B><br><input type="password" name="Pass"><br>
      <input type="submit" name="submit" value="Envoyer">
      </form>
    </td>
  </tr></table><tr><td valign=top align=center>
  <img src="graphs/cadenas.gif">
  </td></tr>
</table>
</body></html>
page BO_gestion.php
<?php
session_start();
unset  ($_SESSION['loginOK']);

// On effectue les traitements qu'à la condition que les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['Pseudo'])) && (!empty($_POST['Pass'])) ) {

    $Pseudo = $_POST['Pseudo'];
    $Pass = $_POST['Pass'];

    include "config.php";
    $sql = "SELECT * FROM WALLTEK_ACCES WHERE Pseudo='".$Pseudo."'";
    $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
	
	// Si l'utilisateur existe
    if (mysql_num_rows($req) > 0) {
        $data = mysql_fetch_assoc($req);

        // Si le  mot de passe est correct
        if ($Pass == $data['Pass']) {
            echo "ok";			
            $_SESSION['Pseudo'] = $Pseudo;
            $_SESSION['Pass'] = $Pass;
			$_SESSION['loginOK'] = 'ok';
			$_SESSION['email'] = $data['wt_acces_email'];
            $_SESSION['nom'] = $data['wt_acces_nom'];
			
			?>
            <HTML>
              <head>
                <title>WALLTEK - Back Office</title>
              </head>	  
              <frameset cols="150,*" frameborder=0 border=0 framespacing=0>
              <frame name=a scrolling=no noresize src="BO_menu.php">
              <frame name=b src="BO_accueil.php">
              </frameset><noframes>Le naviguateur n'affiche pas les frames.</noframes>
            </body></HTML>
            <?php
        }
		// Si le mot de passe est incorrect
		else{
		    $erreur = "ok";
			$message = "ERREUR<br />Votre mot de passe est incorrect.";
		}
	}
	// Si l'utilisateur n'existe pas
	else{
	    $erreur ="ok";
		$message = "ERREUR<br />Ce nom d'utilisateur n'existe pas.";
	}	
}
// Si il manque soit le pseudo, soit le pass.
else{
    $erreur = "ok";
	$message = "ERREUR<br />Veuillez entrer votre login et votre mot de passe.";
}

// Message d'erreur
if ($erreur =="ok"){
    echo "<HTML>
      <head>
         <title>WALLTEK - Back Office</title>
      </head>
	  <body bgcolor='#9d9d9d'><br /><br /><br />
	  <table border=0 width=400 cellpadding=0 cellspacing=0 align=center><tr><td><table border=1 width=100% bordercolor='#ed9200' bgcolor='#ed9200'>
      <tr>
        <td bgcolor='#FFFFdd' align=center>
          <B><font size='4' face='Verdana, Arial, Helvetica, sans-serif'>ACCES BACK OFFICE</FONT></B><br /><br />
          <font color=red>".$message."</font></b><br><br>
          <a href='BO_identification.php'>retour</a><br /><br /><br />
        </td>
      </tr></table><tr><td valign=top align=center><img src='graphs/cadenas.gif'></td></tr></table>
	  </body></html>";
}
?>
BO_menu.php
Je précise qu'il n'y a là pas encore de verif de login
<?php
session_start();
?>
<html>
  <head>
    <title>menu</title>
  </head>
  <body bgcolor='#ed9200'>
    <br><center>
    <span class=titre><b>BACK OFFICE</b><br><font size=1><?php echo $_SESSION['nom']; ?><br>
    <a href="BO_logout.php" target="_top">déconnexion</font></a></span><br><br><br>   
    
    menus bla bla
    ?>
    </center>
Sur le menu il devrait afficher la variable "nom" mais il n'affiche rien.

Et si je met un truc du genre il me renvoit direct à la page d'erreur :
<?php
session_start();
if($_SESSION['loginOK'] != 'ok'){
    header("location: BO_erreur.php");
}
?>

A préciser que des tests simples de création et destruction de variables de sessions fonctionnent ...

A préciser aussi que mon session.save_path est renseigné avec tmp/ mais je n'ai aucun repertoire tmp/ sur mon serveur. Je ne sais tout bonnement pas ou le créer ! J'ai testé déjà de le créer dans chaque repertoire mais rien ne bouge. Le serveur est celui de la boite donc il n'y a pas que le webserver dessus j'ai pas mal de possibilité quand à la position de ce repertoire de mort !!! Celà pourrait venir de là en sachant que ça fonctionne avec des tests simples ? (celà prouve que les variables sont bien enregistrées non ?)

par lacfab » 05 janv. 2009, 11:49

edit : doublon

par lacfab » 23 déc. 2008, 15:52

oups pardon j'ai tellement allégé le code que j'en oublie la moitié ...

j'ai un formulaire qui envoit ces infos sur cette page. A préciser que ce code fonctionne depuis des années sur un autre serveur qui tourne sous PHP 4.5

par dunbar » 23 déc. 2008, 14:17

Bonjour,
:idea: Ou est déclarer $pseudo et $pass (pour ta requete) :?:
Et $_SESSION['loginOK'] :?:

par lacfab » 23 déc. 2008, 12:20

Bon désolé mais vu que mon pass marche pas et que je reçois jamais de mail quand je clique sur "pass oublié" je peux pas éditer ...

Voilà le code de ma page de logue :
<?php
session_start();
require "config.php";
$loginOK = false;

  $sql = "SELECT * FROM table WHERE Pseudo='".$Pseudo."' AND Pass='".$Pass."'";
  $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);


// On effectue les traitements qu'à la condition que les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['Pseudo'])) && (!empty($_POST['Pass'])) ) {

  // 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 ($Pass == $data['Pass']) {
      $loginOK = true;
    }

// Si le login a été validé on met les données en sessions
  $_SESSION['loginOK'] = 'no';
if ($loginOK) {
  $_SESSION['Pseudo'] = $data['Pseudo'];
  $_SESSION['loginOK'] = 'ok';
  echo "session OK";
}
else{
    echo "ça marche pas";
}

?>