2014-09-29 3 views
0

У меня проблема, когда некоторые из моих страниц занимают длительный период загрузки из-за связи с различными внешними API. Я заметил, что, когда я перехожу на другую страницу или перезагружаю текущую страницу, прежде чем она закончит загрузку, она, похоже, уронит мой сеанс и выйдет из системы.Сессии теряются при перегрузке частичных страниц

Например, если вы загружаете страницу about.php, а затем я нажимаю ссылку для загрузки profile.php до того, как файл about.php полностью загружен, он выводит меня из системы и отбрасывает обратно на экран входа в систему.

Я не знаю, что искать, но не удалось найти информацию о подобных проблемах. Может ли кто-нибудь пролить свет на то, что будет причиной этого?

Верх каждой страницы:

sec_session_start(); 

if(login_check($dp_conn) == false) 
{ 
    header("location:../login.php?error=1"); 
} 

sec_session_start функция():

function sec_session_start() 
{ 
    $session_name = 'sec_session_id'; // Set a custom session name 
    $secure = false; // Set to true if using https. 
    $httponly = true; // This stops javascript being able to access the session id. 

    ini_set('session.use_only_cookies', 1); // Forces sessions to only use cookies. 
    $cookieParams = session_get_cookie_params(); // Gets current cookies params. 
    session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly); 
    session_name($session_name); // Sets the session name to the one set above. 

    session_start(); // Start the php session 
    session_regenerate_id(); // regenerated the session, delete the old one. 
} 

login_check функция():

function login_check($db) 
{ 
    // Check if all session variables are set 
    if(isset($_SESSION['user_id'], $_SESSION['username'], $_SESSION['login_string'])) 
    { 
     $user_id = $_SESSION['user_id']; 
     $login_string = $_SESSION['login_string']; 
     $username = $_SESSION['username']; 

     $user_browser = $_SERVER['HTTP_USER_AGENT']; // Get the user-agent string of the user. 

     $query = "SELECT password FROM users WHERE id = " . $user_id . " LIMIT 1"; 
     $result = mysql_query($query, $db); 

     if (mysql_num_rows($result) == 1) 
     { 
      // If the user exists 
      $row = mysql_fetch_row($result); 
      $password = $row[0]; 
      $login_check = hash('sha512', $password.$user_browser); 

      if($login_check == $login_string) 
      { 
       // Logged In!!!! 
       return true; 
      } 
      else 
      { 
       // Not logged in 
       return false; 
      } 
     } 
     else 
     { 
      // Not logged in 
      return false; 
     } 
    } 
    else 
    { 
     // Not logged in 
     return false; 
    } 
} 
+0

Вы используете sec_session_start(), который, я думаю, воссоздает идентификатор сеанса, используя обычный session_start() – BojanT

+0

Извините, что забыл включить код для этой функции. Он использует session_start(), только внутри функции, которая устанавливает другие параметры. – 2014-09-29 21:54:27

+0

Как я уже сказал, session_regenerate_id() генерирует новый идентификатор сеанса, и что происходит, когда вы пытаетесь загрузить новую страницу, первая заканчивается и устанавливает новый идентификатор сеанса, а вторая страница уже отправила старый идентификатор сеанса, срок действия которого истек. Попробуйте комментировать '// session_regenerate_id();' – BojanT

ответ

1

Я добавлю ответ, как это может помочь другим , Таким образом, использование sec_session_start() будет использовать различный SESSION ID на каждом запросе страницы, в частности,

session_regenerate_id();

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

Просто удалите session_regenerate_id(); от sec_session_start функция.

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