ПРОБЛЕМА
У меня есть панель администратора. В настоящее время только Mozilla может обрабатывать входы в систему. Браузеры, такие как Chrome, IE, Opera даже не будут отображать сообщения, передаваемые через сеансы, поэтому никто не может войти ни в один браузер, кроме Mozilla.
НЕКОТОРАЯ ИНФОРМАЦИЯ
- Я использую PHP 5.3.6 на моем сервере, PHP 5.3.5 на моем локальном
компьютер.
- Мой код ориентирован на объект.
ini_set("session.use_only_cookies", 1);
и
ini_set('session.cookie_secure', 1);
используются в методе строительства
моего сессионного класса.
- Этот сайт на SLL
Процесс входа в систему: Сначала я собираю всю информацию из формы, проверяю и собираю данные. После проверки, если все в порядке, я отправляю эти данные методу login в моем сеансе .
public function login ($user) {
global $siteSettings;
if ($user) {
$this->id = $_SESSION['id'] = $user->id;
$this->username = $_SESSION['username'] = $user->username;
$this->fullName = $_SESSION['fullName'] = $user->fullName;
$this->group_id = $_SESSION['group_id'] = $user->group_id;
$this->groupName = $_SESSION['groupName'] = $user->groupName;
$this->lastLogin = $_SESSION['lastLogin'] = $user->lastLogin;
$this->isAdmin = $_SESSION['isAdmin'] = ($user->admin == 1) ? true : false;
$this->isAgent = $_SESSION['isAgent'] = ($user->agent == 1) ? true : false;
self::$language = $_SESSION['language'] = ($user->language != "" || $user->language != NULL) ? $user->language : self::$language;
if ($user->language != "" || $user->language != NULL) {
$_SESSION['language'] = $user->language;
}else {
if (!defined(DEFAULT_LANGUAGE)) {
$browserLang = "|".$_SERVER["HTTP_ACCEPT_LANGUAGE"];
$browserLang = getStringBetween($browserLang, "|","-", FALSE);
if (!file_exists(LANGUAGES.$browserLang.".php")) $browserLang = FALSE;
}
$_SESSION['language'] = ($browserLang) ? $browserLang : DEFAULT_LANGUAGE;
}
# When 2 Update session_id
$date = new DateTime("now");
$UpdateTime = $siteSettings->session->timeOut * 60;
$date->add(new DateInterval("PT".$UpdateTime."S"));
$_SESSION['SIDUpdateTime'] = $date->format("Y-m-d G:i:s");
# UPDATE LAST LOGIN & ADD SESSION ID
# Clear Fields
members::clearFields();
members::$fields['id'] = $_SESSION['id'];
members::$fields['lastLogin'] = date("Y.m.d G:i:s");
members::$fields['lastLoginIP'] = $_SERVER['REMOTE_ADDR'];
# GET THE SALT
$saltInfo = members::getData("id", "salt", members::$fields['id']);
# SETTING SESSION ID ENCRYPTION
crypt::setKey($saltInfo->salt);
members::$fields['sessionID'] = crypt::encode(session_id());
members::$fields['sessionIP'] = $_SERVER['REMOTE_ADDR'];
members::$fields['sessionAgent'] = $_SERVER['HTTP_USER_AGENT'];
members::save();
$this->loggedIn = true;
var_dump($_SESSION);
}
}
Когда я беру данные, я вижу, что $ _SESSION получил некоторые значения.
Просто чтобы проверить это, я остановил скрипт, где после var_dump($_SESSION);
(добавлено die();
) я создал файл test.php и попробовал это;
<?php
ob_start();
session_start();
echo '<pre>';
var_dump($_SESSION);
echo '<pre>';
ob_end_flush();
?>
Выход array(0) {}
Но когда я пытаюсь сделать то же самое с Mozilla, вывод test.php будет таким, каким он должен быть (в соответствии с результатом метода входа в мой класс сеанса).
- Я пытался с моего локального компьютера, и я не испытываю того же
проблема.
- Я отключил все скрипты java и коды jquery со страницы только для
не имею в виду «возможно».
- После сброса данных скрипт останавливается. Поэтому переменная
$_SESSION
не должна меняться. По какой-то причине, когда он находится на сервере, только Mozilla может показать ожидаемый результат, в то время как другие браузеры показывают NULL
.
На данный момент я действительно не знаю, что думать об этой проблеме, чтобы попытаться решить ее. Все, что я могу думать, это то, что эта проблема, возможно, связана с конфигурацией сервера. Но тогда PHP - это программирование на стороне сервера. PHP не должен отображать другое поведение для браузеров, таких как Jquery, CSS, HTML ...
Извините, я не могу предоставить ссылку на панель администратора. Учитывая, что это активная панель администратора. При необходимости я могу установить его в другом домене, чтобы вы могли попробовать, но я полагаю, что приведенная выше информация все объясняет.
Заранее благодарю за помощь.