Переменные сеанса, не устанавливаемые, но только в Internet Explorer и не на всех машинах

При вхождении в сайт я работаю над функциями как ожидалось на моей локальной машине, но перестал работать на удаленном сервере, но ТОЛЬКО в Internet Explorer. Строка над заголовком - то, что это работает в IE локально, просто не на удаленной машине.

Что в мире могло вызвать это? Я ступил через код удаленной машины и вижу, что вводимые значения входа в систему проверяются в базе данных, они найдены, и затем функцию входа в систему называют. Это устанавливает два $ _SESSION переменные и перенаправления к основной администраторской странице. Однако в IE только (и не при выполнении на локальной машине... это является ключевым) $ _SESSION переменные не присутствуют к тому времени, когда Вы добираетесь до основной администраторской страницы. var_dump($_SESSION) дает мне, что я ожидаю на каждом браузере, когда я выполню это в своем окружении и в каждом браузере кроме IE 6, 7 и 8 при выполнении на удаленном сервере (где я получаю нулевое значение, как будто ничто не было установлено за $ _SESSION).

Этому действительно озадачили меня, таким образом, любой совет ценится.

Для примера... в IE, выполненном локально, var_dump дает мне:

array
'Username' => string 'theusername' length=11
'UserID'   => string 'somevalue' length=9

Работайте на удаленном сервере (IE только... хорошо работает в других браузерах), var_dump, дает мне:

array(0){}

Код (минимальный пример..., хотя действительно пример кода не необходим с этой проблемой):

$User = GetUser($Username, $Password);
    if ($User->UserID <> "") { // this works so we call Login()...
        Login($User); // this also works and gives expected results. on to redirect...
        header("Location: index.php"); // a var_dump at index.php shows that there is no session data at all in IE, remotely.
    } else {
        header("Location: login.php");
    }


function Login($data) {
        $_SESSION['Username'] = $data->Username;
        $_SESSION['UserID'] = $data->UserID;
// a var dump here gives the expected data in every browser
    }

Править: Решенный это. Это было то, что доменное имя на сервере тестирования имело подчеркивание в нем. Никакая идея, почему и не имеют времени к Google для него прямо сейчас, но подчеркиванию, названному чем-то как some_client.ourcompany.com, не была проблемой. Должен любить Internet Explorer... он похож на пассивного агрессивного коллегу, которого Вы просто не можете избежать.

5
задан rg88 20 May 2010 в 00:02
поделиться

2 ответа

Проверьте значение session.cookie_domain в вашем файле php.ini. Если это значение установлено, убедитесь, что оно соответствует вашим ожиданиям. Это самая большая вещь, о которой я могу думать, которая может вести себя по-разному локально и удаленно.

Кроме того, если у вас установлено значение session.cookie_lifetime, попробуйте закомментировать эту строку в своем php.ini. Я заметил какое-то странное поведение с IE, когда бросил туда значение.

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

<?php
session_start();
if (!isset($_SESSION['token'])) {
    $_SESSION['token'] = sha1(uniqid(rand(), true));
}

if (!empty($_POST)) {
  $_SESSION['hi'] = preg_replace('/[^\w ]+/','',$_POST['hi']);
  header("Location: index.php");
  exit;
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Session test</title>
</head>
<body>

<h1>How's that session doing?</h1>
<p>Message: <?=htmlspecialchars($_SESSION['hi'])?></p>
<p>Token: <?=htmlspecialchars($_SESSION['token'])?></p>


<form action="index.php" method="post">
<fieldset>
  <label for="hi">What do you have to say?</label>
  <input type="text" name="hi" id="hi">
  <input type="submit" value="Submit">
</fieldset>
</form>

</body>
</html>
1
ответ дан 15 December 2019 в 00:52
поделиться

Попробуйте поместить session_start(); в начало страницы, на которой вы создаете сессии. и проверьте, правильно ли вы назначили вары сессии:

$_SESSION['SESSION_NAME'] = 'sessionValue';
0
ответ дан 15 December 2019 в 00:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: