2015-08-26 7 views
0

У меня есть веб-страница, которая использует переменные PHP $_SESSION. Он отлично работает на моем компьютере с помощью Google Chrome (версия 44.0.2403.157 (64-разрядная версия)), но он не работает для других браузеров или других версий Chrome.

Что можно сделать, чтобы исправить это? Я бы предпочел, если бы я мог использовать переменные $SESSION, поэтому мне не нужно перекодировать все мои веб-страницы, но если я должен, что альтернатива?

В контексте: Я использую переменные $_SESSION для хранения информации, такой как идентификация того, кто «вошел в систему», на мой сайт и продукты в «корзине покупок» пользователя.

Код: Я в начале сеанса, как это:

function sec_session_start() { 
    $session_name = 'sec_session_id'; // Set a custom session name 
    $secure = false; 
    // This stops JavaScript being able to access the session id. 
    $httponly = true; 
    // Forces sessions to only use cookies. 
    if (ini_set('session.use_only_cookies', 1) === FALSE) { 
     header("Location: ../error.php?err=Could not initiate a safe session (ini_set)"); 
     exit(); 
    } 
    // Gets current cookies params. 
    $cookieParams = session_get_cookie_params(); 
    session_set_cookie_params($cookieParams["lifetime"], 
     $cookieParams["path"], 
     $cookieParams["domain"], 
     $secure, 
     $httponly); 
    // Sets the session name to the one set above. 
    session_name($session_name); 
    session_start();   // Start the PHP session 
    session_regenerate_id(true); // regenerated the session, delete the old one. 
} 

Как я уже говорил, он отлично работает в некоторых браузерах. Что-то мешает ему работать в других.

Под «рабочим», я имею в виду, браузер позволяет использовать переменные $SESSION. Я делаю не означает, что переменные сохраняются в браузерах.

Когда я проверяю файлы cookie браузера, где он не работает, он говорит, что он хранит кеш, куки и локальное хранилище для моего сайта.

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

<?php 
/** 
* 
* 
*/ 


         include_once 'db-credentials.php'; //get database credentials 
         $mydb2= logindb(); //login to database 

         sec_session_start(); //start session 




//process form data       
if(isset($_POST['btn-login'])) //if login button was pressed 
{ 

$email = $_POST['email']; 
$upass = $_POST['pwd']; 
$row = $mydb2->get_row($mydb2->prepare( 
     "select * from users WHERE email='$email'"), ARRAY_A 
     ); 
if($row['password']==$upass) 
{ 
    $_SESSION['user'] = $row['user_id']; 
    $_SESSION['name'] = $row['username']; 
    echo "<script>window.location = 'http://mywebsite.ca/order/'</script>"; 
} 
else 
{ 
    ?> 
     <script>alert('Invalid login. Please check your email and password and try again');</script> 
     <?php 
} 

} 

Теперь этот код работает нормально. При правильном имени пользователя и пароле программа попадает во внутренний оператор if и будет запускать оператор echo "<script>window.location = 'http://mywebsite.ca/order/'</script>";.

Однако, когда он добирается до http://mywebsite.ca/order/, он больше не сохраняет переменные сеанса!

+0

Я не уверен, почему вы заново изобретаете или переписываете функцию 'session_start()'. –

+0

Для чего это полезно? – Bernhard

+0

@CharlotteDunois Я использую измененный session_start() по соображениям безопасности. Так же, если изменить его на session_start(), это не исправить мою проблему. Все еще не работает. – Mel

ответ

0

Я понял. Раньше я звонил в функцию get_header(), прежде чем я позвонил в функцию session_start(). В некоторых браузерах это отлично работало, но не в других.

Я изменил его так, session_start() - это мое первое утверждение.

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