PHP les variables de session ne portant pas sur mon enregistré dans la page, mais l'ID de session est

Je suis en utilisant PHP 4.3.9, Apache/2.0.52

Je vais essayer d'obtenir un système d'ouverture de session de travail qui s'inscrit DB valeurs dans une session où ils sont disponibles une fois connecté. Je perds les variables de session une fois que je suis redirigé.

J'utilise le code suivant pour imprimer l'ID de session/valeurs sur mon formulaire de connexion à la page et de la redirection de la page:

echo '<font color="red">session id:</font> ' . session_id() . '<br>';
echo '<font color="red">session first name:</font> ' . $_SESSION['first_name'] . '<br>';
echo '<font color="red">session user id:</font> ' . $_SESSION['user_id'] . '<br>';
echo '<font color="red">session user level:</font> ' . $_SESSION['user_level'] . '<br><br>';

C'est ce qui est imprimé dans mon navigateur à partir de ma page de connexion (j'ai juste un commentaire de l'en-tête de redirection de l'utilisateur connecté en page). C'est la bonne info venant de ma DB, donc tout est beau à ce point.

session id: 1ce7ca8e7102b6fa4cf5b61722aecfbc
session first name: elvis
session user id: 2
session user level: 1

C'est ce qui est imprimé sur mon redirigé/enregistré dans la page (quand je dé-commenter l'en-tête/redirect). ID de Session est la même, mais je n'ai pas de valeurs pour l'individu des variables de session.

session id: 1ce7ca8e7102b6fa4cf5b61722aecfbc
session first name:
session user id:
session user level:

J'obtiens les erreurs suivantes:

Undefined index: prenom

Undefined index: user_id

Undefined index: user_level

J'ai un mondial header.php fichier qui ma loggedIN.php ne PAS appeler, si loggedOUT.php - pour porter un toast à la session):

header.php

<?php
ob_start();
session_start();

//if NOT on loggedout.php, check for cookie. if exists, they haven't explicity logged out so take user to loggedin.php
if (!strpos($_SERVER['PHP_SELF'], 'loggedout.php')) {
    /*if (isset($_COOKIE['access'])) {
        header('Location: www.mydomain.com/loggedin.php');
    }*/
} else {
    //if on loggedout.php delete cookie
    //setcookie('access', '', time()-3600);

    //destroy session
    $_SESSION = array();
    session_destroy();
    setcookie(session_name(), '', time()-3600);
}

//defines constants and sets up custom error handler
require_once('config.php');

?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

some page layout stuff

Login portion is eventually called via include

footer stuff

Mon loggedIN.php ne fait rien, mais le début de la séance

<?php
session_start();
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

La la logique de mon script de connexion, la clé de la partie, je suis aller chercher de la DB à droite dans $_SESSION (environ à mi-chemin vers le bas):

if (isset($_POST['login'])) {
//access db
require_once(MYSQL);
//initialize an errors array for non-filled out form fields
$errors = array();
//setup $_POST aliases, clean for db and trim any whitespace
$email  = mysql_real_escape_string(trim($_POST['email']), $dbc);
$pass   = mysql_real_escape_string(trim($_POST['pass']), $dbc);
if (empty($email)) {
$errors[] = 'Please enter your e-mail address.';
}
if (empty($pass)) {
$errors[] = 'Please enter your password.';
}
//if all fields filled out and everything is OK
if (empty($errors)) {
//check db for a match
$query = "SELECT user_id, first_name, user_level 
FROM the rest of my sql here, blah blah blah";
$result = @mysql_query($query, $dbc) 
OR trigger_error("Query: $query\n<br />MySQL Error: " . mysql_error($dbc));
if (@mysql_num_rows($result) == 1) { //a match was made, OK to login
//register the retrieved values into $_SESSION
$_SESSION = mysql_fetch_array($result);
mysql_free_result($result);
mysql_close($dbc);
/*              
setcookie('access'); //if "remember me" not checked, session cookie, expires when browser closes
//in FF you must close the tab before quitting/relaunching, otherwise cookie persists
//"remember me" checked?
if(isset($_POST['remember'])){ //expire in 1 hour (3600 = 60 seconds * 60 minutes)
setcookie('access', md5(uniqid(rand())), time()+60); //EXPIRES IN ONE MINUTE FOR TESTING
}
*/
echo '<font color="red">cookie:</font> ' . print_r($_COOKIE) . '<br><br>';
echo '<font color="red">session id:</font> ' . session_id() . '<br>';
echo '<font color="red">session first name:</font> ' . $_SESSION['first_name'] . '<br>';
echo '<font color="red">session user id:</font> ' . $_SESSION['user_id'] . '<br>';
echo '<font color="red">session user level:</font> ' . $_SESSION['user_level'] . '<br><br>';
ob_end_clean();
session_write_close();
$url = BASE_URL . 'loggedin_test2.php';
header("Location: $url");
exit();
} else {
//wrong username/password combo
echo '<div id="errors"><span>Either the e-mail address or password entered is incorrect or you have not activated your account. Please try again.</span></div>';
}
//clear $_POST so the form isn't sticky
$_POST = array();
} else { 
//report the errors
echo '<div id="errors"><span>The following error(s) occurred:</span>';
echo '<ul>';
foreach($errors as $error) {
echo "<li>$error</li>";
}
echo '</ul></div>';
}
} //end isset($_POST['login'])

si je commenter l'en-tête de redirection sur la page de connexion, je peux écho les $_SESSION variables avec la bonne info de la bd. Une fois redirigé vers la page de connexion, cependant, ils sont partis/unset.

Quelqu'un a des idées? J'ai passé presque toute la journée sur ce point et ne peut pas dire que je suis plus proche d'essayer de le comprendre.

BTW, j'ai récemment fait 2 pages de test, on a commencé une session, de définir certaines variables sur elle, a eu la soumission d'un formulaire qui redirigés vers une deuxième page qui n'a rien fait, mais en lecture/sortie de la session de vars. Tout semble bien fonctionner, je suis juste d'avoir des problèmes avec quelque chose que je fais dans mon application principale.

OriginalL'auteur | 2009-01-06