При вхождении в сайт я работаю над функциями как ожидалось на моей локальной машине, но перестал работать на удаленном сервере, но ТОЛЬКО в 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... он похож на пассивного агрессивного коллегу, которого Вы просто не можете избежать.
Проверьте значение 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>
Попробуйте поместить session_start(); в начало страницы, на которой вы создаете сессии. и проверьте, правильно ли вы назначили вары сессии:
$_SESSION['SESSION_NAME'] = 'sessionValue';