сессия — PHP $ _SESSION работает в некоторых браузерах, а не в других

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

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

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

<?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

Решение

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

Я изменил это так session_start() мое первое заявление.

1

Другие решения

Других решений пока нет …