Сессии сходят с ума.Только Mozilla может обрабатывать - PullRequest
3 голосов
/ 24 октября 2011

ПРОБЛЕМА


У меня есть панель администратора. В настоящее время только 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 ...

Извините, я не могу предоставить ссылку на панель администратора. Учитывая, что это активная панель администратора. При необходимости я могу установить его в другом домене, чтобы вы могли попробовать, но я полагаю, что приведенная выше информация все объясняет.

Заранее благодарю за помощь.

Ответы [ 3 ]

1 голос
/ 24 октября 2011

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

также проверьте это http://php.net/manual/en/function.session-cache-limiter.php

0 голосов
/ 24 ноября 2011

Оказывается, Mozilla FireFox может обрабатывать некоторые данные, но другие браузеры, с которыми я пробовал, не работают, и поэтому они сбрасывают весь сеанс при каждой загрузке страницы.

У меня не было проблем с моим локальным компьютером, но наНа сервере у меня была проблема сессий.Я не знаю, почему session_set_cookie_params(); и setcookie(); не работали на сервере, поэтому мне пришлось кодировать более длинную версию;

private static function sessionLifeTime() {
global $siteSettings;
# HOW LONG WE WANT SESSIONS
$lifeTime = intval($siteSettings->session->timeOut) * 60;

if (isset($_SESSION['id']) && isset($_SESSION['lastActivity']) && (time() - $_SESSION['lastActivity'] > $lifeTime) ) {
// SEND INFORMATION TO USER
self::logout();
}
$_SESSION['lastActivity'] = time();
}

Замена моего метода приведенным выше кодом решила проблему.

Спасибо всем за ваше время, заботу и интерес.

0 голосов
/ 24 октября 2011

Если что-то большое не работает, обрежьте его, протестируйте, отладьте и соберите оттуда.

Это работает?(Запустите его дважды).

<?php

session_start();

echo "Session ID: " . session_id() . "<br/>\n";

if (!isset($_SESSION['test']))
{
    $_SESSION['test'] = "foobar";
    echo "Setting session variable: ";
    echo $_SESSION['test'];
}
else
{
    echo "Restoring session variable: ";
    echo $_SESSION['test'];
}

Если это работает во всех браузерах, это как-то связано с вашим кодом.Например, пустой сеанс может быть связан с файлом cookie, который не может быть записан.Также установите сообщение об ошибке на E_ALL |E_STRICT, так что вы увидите все, что идет не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...