[HELP!]Erreur avec les Sessions php4...

Statut
N'est pas ouverte pour d'autres réponses.

k o D

Elite
Voilà, j'ai une erreur avec ma session php4.

Voici l'erreur:

Code:
Connexion...


Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/opt3/local/apache/htdocs/sites/n/notrempire.com/connexion.php:3) in /home/opt3/local/apache/htdocs/sites/n/notrempire.com/connexion.php on line 19

Warning: Cannot modify header information - headers already sent by (output started at /home/opt3/local/apache/htdocs/sites/n/notrempire.com/connexion.php:3) in /home/opt3/local/apache/htdocs/sites/n/notrempire.com/connexion.php on line 24

Warning: Cannot modify header information - headers already sent by (output started at /home/opt3/local/apache/htdocs/sites/n/notrempire.com/connexion.php:3) in /home/opt3/local/apache/htdocs/sites/n/notrempire.com/connexion.php on line 25
Vous êtes à présent connecté(e) en tant que Ko²diaK. ?>
Sans compter que j'ai un message d'internet explorer me disant uqe des élements du formulaire doivent être envoyé et qu'il n'y arrive pas...

Et voici le code:

Code:
<?
include("protec/configuration.php");
echo "Connexion...<br><br>";
$password2 = md5($password);

mysql_connect($host,$login,$pass) or die ('Erreur de CONNEXION'.mysql_error());
$req="SELECT pass_m,actif_m FROM membres WHERE pseudo_m='$pseudo'";
$res=mysql('notrempirecom',$req);
$nb = mysql_num_rows($res);
$row = mysql_fetch_object($res);
if ($nb == '0')
{
echo "Pseudo/Password invalide. ";
}
elseif ($password2 == $row->pass_m) 
	{
    if ($row->actif_m == "1") 
		{
		session_start();
        session_register("pseudo","password");
        if ($log == "auto") 
			{
			$expire=365*24*3600;
            setcookie("pseudo",$pseudo,time()+$expire);
            setcookie("password",md5($password),time()+$expire);
            }
        echo "Vous êtes à présent connecté(e) en tant que <i>$pseudo</i>. ";
        echo "<meta http-equiv='refresh' content='1' URL='http://www.notrempire.com'>";
        }
	else 
	{
    echo "Bonjour $pseudo !<br><br>Un e-mail contenant un lien d'activation vous a été envoyé. Veuillez cliquer sur ce lien afin d'activer votre compte. <br><br>Merci. ";
    }
} 
else 
{
echo "Pseudo/Password invalide. ";
}
?>
Voilà... si quelqu'un savait m'aider... :?
 

SUEd

Touriste
Bon, je n'ai pas tout lu, mais voilà déjà une erreur :

Code:
echo "Connexion...<br><br>";

...


session_start();
Le session_start() doit être placé AVANT tout ce qui compose la page html (texte et balises).
En gros, le session_start() doit être la première instruction.


Sinon, pour info, le
Code:
session_register("var", "valeur");
peut être remplacé par
Code:
$_SESSION["var"] = "valeur";
Et pour accéder à la variable, il suffit d'utiliser $_SESSION["var"]

Aussi, pour les variables venant d'un formulaire (méthode post), il vaut mieux utiliser $_POST["var"] au lieu de $var ;)
 

Tigrou

Touriste
SUEd a dit:
Bon, je n'ai pas tout lu, mais voilà déjà une erreur :

Code:
echo "Connexion...<br><br>";

...


session_start();
Le session_start() doit être placé AVANT tout ce qui compose la page html (texte et balises).
En gros, le session_start() doit être la première instruction.
Exact le session_start doit etre une des premieres instructions, si tel n est pas le cas cela peut justifier le message d erreur "Cannot send session cache limiter - headers already sent " . De plus si par exemple tu fais appel a ce script via un require ou un include et que cette page contient un code html avec la balise <head>...</head> ca deconnera aussi puisque cela envoie egalement des informations concernant le header ...

SUEd a dit:
Sinon, pour info, le
Code:
session_register("var", "valeur");
peut être remplacé par
Code:
$_SESSION["var"] = "valeur";
Et pour accéder à la variable, il suffit d'utiliser $_SESSION["var"]

Aussi, pour les variables venant d'un formulaire (méthode post), il vaut mieux utiliser $_POST["var"] au lieu de $var ;)
C est totalement exact les deux fonctions sont identiques mais tout depend de la version php qu a ton hebergeur. La solution proposee par sued devrait fonctionner dans tous les cas, la tienne n est pas fausse mais pourrait etre a l origine d erreurs
 
1er
OP
k o D

k o D

Elite
non, là mon héberger accepte absolument celà. bon ben je vais mettre le session_start() au débutet je vous tiens au courant
 

SUEd

Touriste
Maitre_des_Cles a dit:
non, là mon héberger accepte absolument celà. bon ben je vais mettre le session_start() au débutet je vous tiens au courant
En fait, le session_register() est à éviter car son fonctionnement dépend de la configuration de PHP de l'hébergeur.

Si vous voulez que votre script fonctionne indépendamment de la configuration de la directive register_globals, vous devez utiliser la variable $_SESSION. Tous les éléments de $_SESSION sont automatiquement enregistrée. Si votre script utilise session_register(), il ne fonctionnera pas dans les environnements où register_globals est désactivée.
toutes les infos : http://fr.php.net/session_register ;)
 
1er
OP
k o D

k o D

Elite
Bon voilà, je n'ai plus d'erreur SI je ne choisis pas le log auto et donc la création du cookie.

Sauf que internet explorer m'envoie un message d'erreur que voici:



Et donc ben comme je le dis plus haut, les cookies ne fonctionnent pas non plus:

Voici actuellement le code que j'ai:

Code:
<?
session_start();
include("protec/configuration.php");
echo "Connexion...<br><br>";
$password2 = md5($password);

mysql_connect($host,$login,$pass) or die ('Erreur de CONNEXION'.mysql_error());
$req="SELECT pass_m,actif_m FROM membres WHERE pseudo_m='$pseudo'";
$res=mysql('notrempirecom',$req);
$nb = mysql_num_rows($res);
$row = mysql_fetch_object($res);
if ($nb == '0')
{
echo "Pseudo/Password invalide. ";
}
elseif ($password2 == $row->pass_m) 
	{
    if ($row->actif_m == "1") 
		{
		$_SESSION["pseudo"]=$_POST["pseudo"];
		$_SESSION["password"]=$_POST["password"];
        if ($log == "auto") 
			{
			$expire=365*24*3600;
            setcookie("pseudo",$pseudo,time()+$expire);
            setcookie("password",md5($password),time()+$expire);
            }
        echo "Vous êtes à présent connecté(e) en tant que <i>$pseudo</i>. ";
        echo "<meta http-equiv='refresh' content='1' URL='http://www.notrempire.com'>";
        }
	else 
	{
    echo "Bonjour $pseudo !<br><br>Un e-mail contenant un lien d'activation vous a été envoyé. Veuillez cliquer sur ce lien afin d'activer votre compte. <br><br>Merci. ";
    }
} 
else 
{
echo "Pseudo/Password invalide. ";
}
?>
 

SUEd

Touriste
ce n'est pas une erreur, c'est juste un msg te disant que si tu veux actualiser la page, il DOIT renvoyer les variables du formulaire, ce qui est normal... Vu que la page suivante dépend des variables envoyées par le formulaire...


Concernant ton code... Là, on voit le traitement lors du login, et non le traitement pour voir comment tu traites l'auto-login lorsqu'un visiteur arrive sur le site...

Quand un mec arrive sur le site, tu regardes s'il a des cookies. S'il en a une, tu vérifies si le login/pass correspond à quelqu'un de ton site, si oui => loggué, si non => pas loggué
C'est tout :)
 
1er
OP
k o D

k o D

Elite
ce n'est pas une erreur, c'est juste un msg te disant que si tu veux actualiser la page, il DOIT renvoyer les variables du formulaire, ce qui est normal... Vu que la page suivante dépend des variables envoyées par le formulaire...
Et comment je pourrais faire pour en pas avoir ce message?

Et le log auto, c'est pour la personne qui se connecte pour la 1ère fois.. Donc il ne peut pas encore avoir un cookie avec son pseudo et password...

Scuse si j'ai pas compris ce que tu voulais dire :oops:

Code:
if ($log == "auto") 
			{
			$expire=365*24*3600;
            setcookie("pseudo",$pseudo,time()+$expire);
            setcookie("password",md5($password),time()+$expire);
            }
 
1er
OP
k o D

k o D

Elite
up... :?
 
1er
OP
k o D

k o D

Elite
heu... j'ai pas encore la solution à mon problème... :?
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut