Page 1 sur 2

problème session en changeant de serveur

Posté : 18 déc. 2008, 17:00
par lacfab
Bonjour,

J'ai construit un back office pour ma boite sur mon serveur perso ... tout fonctionne super bien (voici le phpinfo du serveur : http://www.lefuretrouge.fr/walltek/info.php)

Seulement quand j'ai transféré mes pages sur le serveur de la boite ... plus rien ne fonctionne ! Apparement celà vient des sessions (phpinfo du serveur de la boite : http://serveur.graphik.fr/info.php)

Celà peut également venir de la version de PHP (qui est à jour sur le serveur de la boite mais pas sur le mien, j'ai déjà du remplacer mes <? par des <?php)

help !
bonnes fetes

Posté : 18 déc. 2008, 17:52
par Ripat
Ton session.save_path sur ton nouveau serveur n'est pas défini. Mets-lui un chemin où le PID d'apache a les droits 6 (rw). En général on mets les fichiers de session dans un répertoire avec un sticky bit pour que seul les propriétaires des fichiers puisse les effacer. Typiquement un répertoire avec les droits 1733 (drwx-wx-wt)

Posté : 19 déc. 2008, 21:23
par lacfab
Merci maintenant j'ai cette erreur grrr

"Echec de la connexion à la base de donnée
Lost connection to MySQL server during query"

Les identifiants sont bons et fonctionnaient sur l'autre serveur snif.

Posté : 22 déc. 2008, 12:36
par lacfab
Cela pourait venir du port 16080 peut être ?

http://docs.info.apple.com/article.html ... 3ws10.html

Posté : 22 déc. 2008, 16:39
par niuxe
Salut,

Est ce que tu utilises des class ? Il y a eu des changements lors de la migration de php4 à 5. Il est courant qu'une class php4 ne fonctionne pas ou pas correctement sous PHP5.

<<<EDIT
Je viens de passer sur la page : http://www.graphik.fr/video/. Logiquement, il n'est pas nécessaire de demander à l'utilisateur de spécifier son OS. Avec PHP, tu peux le savoir simplement. Regarde de près la superglobale $_SERVER
EDIT;

++

Posté : 22 déc. 2008, 17:58
par lacfab
Merci pour les class je vais jeter un oeil de ce pas.

Mais pour le problème je pense que celà vient du port car aucune session n'est retenue. je n'arrive pas à joindre mon administrateur réseau grrrr (c'est lui qui a fait la page vidéo d'ailleurs ... je n'étais même pas au courant LOL)

Posté : 22 déc. 2008, 18:02
par lacfab
euh pardon mais y aurait il un lien pour savoir quels sont les moodifs php 5 par rapport à 4 ? je trouve rien de "pro".

Sinon ce n'est pas le port ... étant donné que le serveur est unix il semberait qu'il faut donner les autorisation d'écriture pour les sessions ... mais comment je sais ou il doit les écrire ?

Posté : 23 déc. 2008, 11:50
par lacfab
Suite à la remarque de ripat j'ai mis session.save_path = "/tmp" mais ça ne marche pas mieux ...

en fait à chaque fois que je me logue il me dit que le pass ne marche pas. Si je met l'url directe d'une de mes pages elle s'affiche (alors qu'elle devrait me renvoyer vers la page de logue) mais si je clique sur un lien (qui passerait en url une variable de session) ça plante et me fait soit une erreur SQL si la variable est utilisée dans une requete, soit n'affiche rien du tout.

Donc le problème vient bien des sessions ... je ne sais plus trop quoi bidouiller pour que ça fonctionne snif.

Posté : 23 déc. 2008, 12:20
par lacfab
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";
}

?>

Posté : 23 déc. 2008, 14:17
par dunbar
Bonjour,
:idea: Ou est déclarer $pseudo et $pass (pour ta requete) :?:
Et $_SESSION['loginOK'] :?:

Posté : 23 déc. 2008, 15:52
par lacfab
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

Posté : 05 janv. 2009, 11:49
par lacfab
edit : doublon

Posté : 06 janv. 2009, 17:11
par lacfab
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 ?)

Posté : 07 janv. 2009, 10:26
par dunbar
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.

Posté : 07 janv. 2009, 10:48
par lacfab
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.