Cookies et connexion auto => trop bizarre mon problème !

Eléphant du PHP | 331 Messages

26 janv. 2007, 11:21

Bonjour,

Il m'arrive un truc que je n'arrive absolument pas à m'expliquer :

J'ai un fichier cookie.php qui contient le code suivant :
<?php
session_start();

$login = $_COOKIE['pseudo'];
$num = $_COOKIE['user_id'];

if (isset($num)) 
{
$_SESSION['connecte'] = 1;
$_SESSION['login'] = $login;
$_SESSION['user_id'] = $num;
}

//header ('Location: '.$HTTP_REFERER);

?>
Sur les autres pages du site, je fais un include de ce fichier tout au début et mes variables de session ($_SESSION['connecte'], $_SESSION['login'] et $_SESSION['user_id']') ne sont pas récupérées. Par conséquent ce que je veux faire ensuite ne marche pas.

Par contre, si je fais un lien cliquable vers le fichier cookie.php en rajoutant en fin de celui ci la ligne suivante
header ('Location: '.$HTTP_REFERER);
, alors je reviens bien sur ma page initiale avec mes variables de session correctement récupérées.

Y aurait-il une incompatibilté avec l'include ?

Comment pourrais-je le gérer sans le lien cliquable mais de manière auto ?

Merci

ViPHP
ViPHP | 1996 Messages

26 janv. 2007, 14:15

Bonjour,

Peux tu monter le début des autres pages où tu fais ton include() ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 331 Messages

26 janv. 2007, 14:49

<?

include('../scripts/cookie.php');

session_start();

require_once('../Connections/connexion_bdd_mysql.php');

mysql_select_db($database_connexion_bdd_mysql, $connexion_bdd_mysql);
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>.: Les Rois du Prono - Accueil :.</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<link rel="stylesheet" type="text/css" href="style.css">
<style type="text/css">

Invité
Invité n'ayant pas de compte PHPfrance

26 janv. 2007, 14:59

Je pense comprendre :

ton session_start est après ton include. Essaye de le mettre avant.

Eléphant du PHP | 331 Messages

26 janv. 2007, 15:12

Non, désolé, c'est pareil ! J'avais déjà testé .... !

Autre chose ?

ViPHP
ViPHP | 1961 Messages

26 janv. 2007, 15:18

Bonjour,

C'est normal,

Dans ton premier fichier "cookie.php" tu crées une session dans laquelle tu initialises certaines valeurs.
Dans le fichier qui l'inclus tu redémarres la session, donc toutes tes variable de session précédemment intialisées sont perdues.

Supprime tout simplement le session_start() dans le fichier qui demande l'inclusion.
<?

include('../scripts/cookie.php');

require_once('../Connections/connexion_bdd_mysql.php');

mysql_select_db($database_connexion_bdd_mysql, $connexion_bdd_mysql);
?> 
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 331 Messages

26 janv. 2007, 16:00

Non, désolé, mais ça ne change rien.
Alors pour voir si c'était pas ma page (et tout le reste du code qu'elle contient) qui me foutait le bordel, j'ai créé une autre page ultra simpliste avec uniquement ça :
<?
//session_start();

include('../scripts/cookie.php');
echo "pseudo à afficher : ".$_SESSION['login'];

?>
Comme tu vois, plus de session_start() puisqu'en commentaire et je demande juste à afficher le pseudo à l'aide de la variable $_SESSION['login']

Et bien rien n'y fait, ça ne s'affiche toujours pas alors que je suis persuadé que la variable de session appellée existe.

ViPHP
ViPHP | 1961 Messages

26 janv. 2007, 16:18

Ça veux tout simplement dire que ton $_COOKIE ne contient rien

Dans ton fichier "cookie.php" ajoute ceci
 echo '<pre>';
print_r($_COOKIE);
echo '</pre>';
Et montre ce que ça donne.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 331 Messages

26 janv. 2007, 16:59

Si si, mon fichier cookie contient bien qque chose :

Pour preuve, voici le résultat que me donne le print_r()
Array
(
[pseudo] => Jay
[user_id] => 2
[roisduprono_data] => a:2:{s:11:\"autologinid\";s:0:\"\";s:6:\"userid\";i:-1;}
)

ViPHP
ViPHP | 1961 Messages

26 janv. 2007, 17:51

Très bien, ton cookie est initialisé mais
if (isset($num))  
Si je regarde ton fichier
include('../scripts/cookie.php');

require_once('../Connections/connexion_bdd_mysql.php');

mysql_select_db($database_connexion_bdd_mysql, $connexion_bdd_mysql);
?> 
le fichier cookie.php est le premier, donc $num n'est pas définit, si $num n'est pas défini tu ne rentres jamais dans ta condition d'initialisation de variables de session.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 331 Messages

26 janv. 2007, 18:21

Mais si, $num est définit puisque mon fichier cookie.php (appelé en premier il est vrai par mon include) attribue à $num la valeur de $_COOKIE['user_id']. Donc le reste s'execute.

Pour rappel, voici mon fichier cookie.php :
<?php 
session_start(); 

$login = $_COOKIE['pseudo']; 
$num = $_COOKIE['user_id']; 

if (isset($num))  
{ 
$_SESSION['connecte'] = 1; 
$_SESSION['login'] = $login; 
$_SESSION['user_id'] = $num; 
} 

//header ('Location: '.$HTTP_REFERER); 

?>
Rappel n°2 => la chose qui est surprenante dans mon histoire, c'est que tout cela fonctionne si je fais un lien cliquable vers cookie.php au lieu d'un include et par conséquent le rajout en fin de cookie.php de la ligne suivante :
header ('Location: '.$HTTP_REFERER); 

ViPHP
ViPHP | 1996 Messages

27 janv. 2007, 19:52

Heu question bête : est ce que ton browser internet accepte les cookies ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 331 Messages

27 janv. 2007, 20:00

Ben j'ai le paramétrage par défaut d'IE7
Et je dirai que oui il se crée puisque le print_r me renvoie des valeurs !

Eléphant du PHP | 99 Messages

27 janv. 2007, 20:23

Et si tu essaye de remplacer le "include" par le contenu de cookie.php, ça marche?

(et sinon, perso, j'aurais plutôt gardé le session_start() du fichier qui inclu (en le mettant avant l'inclusion, cependant), et supprimé celui de l'inclusion)