2009-10-26 6 views
-1

J'utilise SESSIONS pour stocker des données à partir d'une base de données lorsqu'un utilisateur se connecte. Cependant, lorsque j'interroge une base de données sur une autre page, les variables SESSION changent sans que je leur attribue de nouvelles valeurs.

Est-ce que quelqu'un sait quel pourrait être le problème?

La page de connexion qui enregistre les variables:

enter code here 
    session_start(); 

    if($_POST['login_button']) { 

    require_once('includes/config.inc.php'); 

    $username = $_POST['login_username']; 
    $password = $_POST['login_password']; 

    $hash_pwd = sha1($password); 

    if(($username != NULL) && ($password != NULL)) { 

    $conn = mysql_connect('localhost', 'admin', 'root') or die(mysql_error()); 
mysql_select_db('main') or die(mysql_error()); 

    $check_users = "SELECT * ". 
      "FROM users ". 
      "WHERE email = '{$username}' AND password = '{$hash_pwd}'   ". 
      "LIMIT 1"; 

    $result = mysql_query($check_users); 
    $counted = mysql_num_rows($result); 

    if($counted != 1) { 

    header("location:login.php?fail"); } else { 

    while ($row = mysql_fetch_array($result)) { 

$useR_login_un = $row['name']; 
$useR_login_user_id = $row['user_id']; 
$useR_login_login_time = $row['login_times']; 
$useR_login_user_email = $row['email']; 
$useR_login_course = $row['course']; 
$useR_login_campus = $row['campus']; 

$useR_login_login_time = $useR_login_login_time + 1; 

$useR_login_datenow = date("Y-m-d") . " " . date("H:i:s"); 

$useR_login_sid = sha1($useR_login_user_id) . rand() . md5($pinch_o_salt); 

$update_login_times = "UPDATE users ". 
         "SET login_times = '{$useR_login_login_time}', last_login = '{$useR_login_datenow}' ". 
         "WHERE email = '{$useR_login_user_email}' AND user_id = '{$useR_login_user_id}'"; 

mysql_query($update_login_times); 


mysql_close($conn); 

$_SESSION['sid'] = sha1($useR_login_user_id) . $pinch_o_salt; 
$_SESSION['user_id'] = $useR_login_user_id; 
$_SESSION['username'] = $useR_login_user_email; 
$_SESSION['name'] = $useR_login_un; 
$_SESSION['course'] = $useR_login_course; 

if($useR_login_login_time == 0) { 
session_write_close(); 
header("Location: first_run.php"); 
exit; 
} 
else { 
session_write_close(); 
header("Location: home.php"); 
exit; 
} 
    } 

    } 

    } else { header("Location: login.php?fail"); exit; } } 

EDIT: Il stocke les variables et quand je vais à une autre page, apparaissent les variables, mais quand je rafraîchir, certains d'entre eux sont perdus certains d'entre eux rester le même, et certains changent à l'information d'un autre utilisateur dans la base de données.

EDIT2: Je me suis rendu compte que cela ne se passe quand je fais une recherche à nouveau la base de données.

La seule chose qui est à l'origine des problèmes est (ON home.php):

$conn = mysql_connect('localhost', 'ggordan_admin', 'valeg0r') or die(mysql_error()); 
mysql_select_db('ggordan_wmin') or die(mysql_error()); 

$query = "SELECT * ". 
      "FROM users ". 
      "WHERE course = '".$_SESSION['course']."' ". 
      "LIMIT 3"; 

$result = mysql_query($query); 
$numrows = mysql_num_rows($result); 

echo $numrows; 

while ($my = mysql_fetch_array($result)) { 

$id = $row['user_id']; 
$name = $row['name']; 

} 

Si je commente ceci, il ne semble pas se produire.

EDIT: Je me suis rendu compte qu'il a quelque chose à voir avec des affrontements variables sur un autre script. Si cela devait se produire

$conn = mysql_connect('localhost', 'ggordan_admin', 'valeg0r') or die(mysql_error()); 
mysql_select_db('ggordan_wmin') or die(mysql_error()); 

$query = "SELECT * ". 
      "FROM users ". 
      "WHERE course = '".$_SESSION['course']."' ". 
      "LIMIT 3"; 

$result = mysql_query($query); 
$numrows = mysql_num_rows($result); 

echo $numrows; 

while ($my = mysql_fetch_array($result)) { 

    // if i change $id to $user_id it breaks the login script 
$id = $row['user_id']; 
$name = $row['name']; 

} 
+1

Code?     –

Répondre

1

En raison pourrait être si vos pages passent de http https ou des serveurs différents, cela provoquera un nouvel identifiant de session à créer.

0

Votre navigateur enregistre le cookie pour la session, et il revient pour tous les appels vers le même domaine, de la même instance du navigateur. (Par exemple, si vous avez deux versions différentes d'IE ou de FireFox lancées, elles peuvent avoir des sessions différentes.)

PHP n'effectue aucune opération sur des sessions autres que le chargement et le stockage. vous pouvez les modifier vous-même à partir de vos pages de serveur.L'autre problème pourrait être de sérialiser/désérialiser la session quand elle est stockée/récupérée.Si vous avez des classes complexes, elles peuvent être confondues dans la traduction

Peut-être pourriez-vous faire une la page pour afficher le contenu de vos variables de session, le lancer dans un nouvel onglet dans votre navigateur, et le rafraîchir chaque fois que vous effectuez une mise à jour de la page sur les autres onglets.

Je suppose que c'est une erreur de programmeur: Remplacez le programmeur et réessayez.

+0

J'ai une page pour afficher le contenu des sessions. Quand il charge des charges, tout apparaît, mais quand il est rafraîchi, la session $ _SESSION ['nom'] disparaît. – Stephen

0

Essayez de supprimer l'appel à

session_write_close() 

Comme je l'ai entendu causer quelques problèmes avec les sessions.

0

La première impression que je suis arrivé est que vous fermez votre session droit après que le client est validée, je me trompe? Jetez un oeil dans cette partie de la logique et laissez-moi savoir si cela résout votre problème!

Espérons que ça aide.

+0

J'ai essayé de supprimer session_write_close(); mais le problème est toujours là. – Stephen

0

Il semble que le problème était que register_globals était sur.

Merci à tous ceux qui ont essayé de répondre à ma façon complexe de poser une simple question :)

Questions connexes