2009-10-26 4 views
-1

Я использую SESSIONS для хранения данных из базы данных при входе пользователя в систему. Однако, когда я запрашиваю базу данных на другой странице, переменные SESSION меняются без того, чтобы я присваивал им новые значения.

Кто-нибудь знает, в чем проблема?

Войти страницу, которая сохраняет переменные:

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: Это хранит переменные и, когда я перейти на другую страницу, появляются переменные, но когда я обновить, некоторые из них были утрачены некоторые из них оставайтесь на прежнем уровне и некоторое изменение информации от другого пользователя в базе данных.

EDIT2: Я понял, что это происходит только при повторном запросе базы данных.

Дело в том, что вызывает проблемы есть (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']; 

} 

Если я комментирую это, это, кажется, не бывает.

EDIT: Я понял, что он имеет какое-то отношение к переменным столкновениям в другом скрипте. Если это случаться

$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

Код?     –

ответ

1

По причине может быть, если ваши страницы переходят с HTTP на HTTPS или разных серверах, это вызовет новый идентификатор сессии должен быть создан.

0

Ваш браузер записывает cookie для сеанса и возвращает его для всех вызовов в тот же домен из одного и того же экземпляра браузера. (т. е. если у вас есть две разные копии IE или FireFox, они могут иметь разные сеансы.

PHP не выполняет никаких операций над сеансами, кроме загрузки и хранения. Единственный способ изменить переменные сеанса: вы меняете их самостоятельно со своих страниц сервера. Другая проблема может заключаться в сериализации/десериализации сеанса, когда он хранится/извлекается. Если у вас есть сложные классы, они могут быть запутаны в переводе.

Возможно, вы могли бы сделать чтобы отображать содержимое ваших переменных сеанса, запускать его на новой вкладке в вашем браузере и обновлять его каждый раз, когда вы выполняете обновление страницы на других вкладках.

Я подозреваю, что это ошибка программиста: замените программиста и повторите попытку.

+0

У меня есть страница для отображения содержимого сеансов. Когда он загружается, все появляется, но когда он обновляется, сеанс $ _SESSION ['name'] исчезает. – Stephen

0

Попробуйте удалить вызов

session_write_close() 

Как я слышал, что это вызывает некоторые проблемы с сессиями.

0

Первое впечатление, которое я получил, это то, что вы закрываете сеанс сразу после проверки клиента, правильно?

// if user does not validate close session and take him back to login 
if($useR_login_login_time == 0) { 
    session_write_close(); 
    header("Location: first_run.php");  
    exit; 
    } 
// if user validates DO NO CLOSE SESSION and take him home 
else { 
    //session_write_close(); 
    header("Location: home.php"); 
    exit; 
} 

Взгляните на эту логическую часть и сообщите мне, исправляет ли она вашу проблему!

Надеюсь, это поможет.

+0

Я попытался удалить session_write_close(); но проблема все еще существует. – Stephen

0

Похоже, что проблема заключалась в том, что register_globals был на.

Спасибо всем, кто пытался ответить на мой сложный вопрос, задав простой вопрос :)

Смежные вопросы