[Подтверждён] Каждый раз новая сессия

[Подтверждён] Каждый раз новая сессия

Сообщение Olf » 01 дек 2008, 17:46

Проблема.

Использую CI 1.7
Модуль сессии - загружается автоматом.

на локальном денвере всё работает.
на хосте начинаются странности.

$this->session->userdata('session_id') - при каждом заходе выдает разные значения.
Но самое странное, что невозможно сохранить данные в сессии... т.е. они сохраняются при просмотри базы, а в программу не выдается.

В чем может быть баг?
Olf
 
Сообщения: 36
Зарегистрирован: 01 дек 2008, 17:35
Откуда: Minsk, Belarus

Re: Каждый раз новая сессия

Сообщение pirrat » 01 дек 2008, 22:30

на хосте время установлено верно?
CI(3проекта) -> Kohana (5 проектов) -> Yii (0)
pirrat
 
Сообщения: 114
Зарегистрирован: 02 фев 2009, 21:09

Re: Каждый раз новая сессия

Сообщение egrik » 02 дек 2008, 06:32

Скорее всего проблема не с сессиями, а с кукисами.
Покажите ваш конфигурационный фал, а именно это участок:

Код: Выделить всё
$config['sess_cookie_name']
$config['sess_expiration']
$config['sess_encrypt_cookie']
$config['sess_use_database']
$config['sess_table_name']
$config['sess_match_ip']
$config['sess_match_useragent']
$config['sess_time_to_update']

$config['cookie_prefix']
$config['cookie_domain']
$config['cookie_path']
egrik
 
Сообщения: 38
Зарегистрирован: 08 фев 2009, 12:37

Re: Каждый раз новая сессия

Сообщение Olf » 02 дек 2008, 10:20

Ещё о странном поведении сессий - когда просто библиотека включена session сессия имеет постоянный ID меняется через какое-то время как и положено, и в базе новые записи не создаются. Т.е. все как и должно быть. Как только начинаешь работать с данными из сессии тут и начинают создаваться новые.

Вот данные и з конфига.

$config['sess_cookie_name'] = 'paprotskaya';
$config['sess_expiration'] = 7200;
$config['sess_encrypt_cookie'] = TRUE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'core_session';
$config['sess_match_ip'] = TRUE; // тут ставил FALSE ничего не менялось.
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
$config['cookie_prefix'] = "";
$config['cookie_domain'] = "";
$config['cookie_path'] = "/";

Ещё информация я вынес папку system и applecation на уровень вниз за коренной каталог сайта.
Время на хосте - даже не знаю какое именно установленно... не проверял.
Последний раз редактировалось Olf 02 дек 2008, 10:35, всего редактировалось 1 раз.
Olf
 
Сообщения: 36
Зарегистрирован: 01 дек 2008, 17:35
Откуда: Minsk, Belarus

Re: Каждый раз новая сессия

Сообщение egrik » 02 дек 2008, 10:28

Olf писал(а):$config['cookie_domain'] = "";


Укажите данный параметр явно, в формате:
.your-domain.com
egrik
 
Сообщения: 38
Зарегистрирован: 08 фев 2009, 12:37

Re: Каждый раз новая сессия

Сообщение Olf » 02 дек 2008, 11:04

Указание напрямую домена в сессии ничего не дало.
Заметил, всякое обращение за данными из сессии создает новую сессию...
Olf
 
Сообщения: 36
Зарегистрирован: 01 дек 2008, 17:35
Откуда: Minsk, Belarus

Re: Каждый раз новая сессия

Сообщение egrik » 02 дек 2008, 11:41

Olf писал(а):Указание напрямую домена в сессии ничего не дало.
Заметил, всякое обращение за данными из сессии создает новую сессию...


это происходит во всех браузерах?
Еще: посмотрите создаются ли кукисы в браузере, сохраняются ли в них данные.
egrik
 
Сообщения: 38
Зарегистрирован: 08 фев 2009, 12:37

Re: Каждый раз новая сессия

Сообщение Olf » 03 дек 2008, 14:33

Под Mozilla, Opera, Crome, Safari - всё повторяется (IE не использую... он какой-то у меня с глюком).

Правда я похоже нашел причину... пытаюсь локализовать и убедиться прав или нет.

Обрыв сессии и её генерация по новому происходит из-за того, что происходит какой-то вывод перед первым обращением к данным из сессии через функции типа: $this->session->.... возможно это связано с кодировками UTF-8
Сейчас погоняю варианты... расскажу.
Olf
 
Сообщения: 36
Зарегистрирован: 01 дек 2008, 17:35
Откуда: Minsk, Belarus

Re: Каждый раз новая сессия

Сообщение egrik » 03 дек 2008, 15:05

Olf писал(а):Обрыв сессии и её генерация по новому происходит из-за того, что происходит какой-то вывод перед первым обращением к данным из сессии

В этом случае, выводились бы ошибки, ксатати, а они у вас включены?
egrik
 
Сообщения: 38
Зарегистрирован: 08 фев 2009, 12:37

Re: Каждый раз новая сессия

Сообщение Olf » 03 дек 2008, 16:34

Да. Включены.
Если бы выводило ошибки я бы разобрался где собака зарыта.
Есть у меня подозрения, на новую библиотеку 'form_validation' или на 'form'
Т.к. я пока отключил с ними работу - все работает четко.
Сессии не размножаются.
Данные сохраняются и извлекаются.
Копаю дальше...
Olf
 
Сообщения: 36
Зарегистрирован: 01 дек 2008, 17:35
Откуда: Minsk, Belarus

Re: Каждый раз новая сессия

Сообщение Olf » 03 дек 2008, 17:02

Проблема локализовалась.
Когда включена библиотека 'form_validation' - сессии размножаются.
Отключил - все как нужно.

Сейчас буду смотреть в чем баг.
Olf
 
Сообщения: 36
Зарегистрирован: 01 дек 2008, 17:35
Откуда: Minsk, Belarus

Form_Validation - UTF-8 - Ahtung!!!

Сообщение Olf » 03 дек 2008, 20:37

Нашел проблему (или мне так просто кажется что в этом проблема была).

К слову сказать она и на Денвере локально проявлялась.

Беда в использовании "правил проверки данных", которые не из CI а из PHP и кодировке UTF-8.... типа если у вас что-то вроде этого:

$rules['username'] = "trim|required|min_length[5]|max_length[12]|xss_clean";
$this->validation->set_rules($rules);

Я убрал везде trim - и размножение сессий прекратилось (правда только после перезагрузки браузера).
Какая тут связь? Сам пока не пойму. Возможно как-то рассыпается сессия.
Olf
 
Сообщения: 36
Зарегистрирован: 01 дек 2008, 17:35
Откуда: Minsk, Belarus

Re: Form_Validation - UTF-8 - Ahtung!!!

Сообщение kosenka » 04 дек 2008, 00:36

Olf писал(а):Нашел проблему (или мне так просто кажется что в этом проблема была).

К слову сказать она и на Денвере локально проявлялась.

Беда в использовании "правил проверки данных", которые не из CI а из PHP и кодировке UTF-8.... типа если у вас что-то вроде этого:

$rules['username'] = "trim|required|min_length[5]|max_length[12]|xss_clean";
$this->validation->set_rules($rules);

Я убрал везде trim - и размножение сессий прекратилось (правда только после перезагрузки браузера).
Какая тут связь? Сам пока не пойму. Возможно как-то рассыпается сессия.


у меня не подтвердилось, НО! я использую нативные сессии (+ немного переделанные под себя)
$this->load->library('form_validation');
$this->form_validation->set_rules('form[middle]','Имя','trim|required');
сессии не "множатся"
Аватара пользователя
kosenka
 
Сообщения: 59
Зарегистрирован: 07 ноя 2008, 04:13

Re: Каждый раз новая сессия

Сообщение Olf » 04 дек 2008, 23:27

Согласен.
Что-то не так :(

На локале сессии не множатся... на хосте множатся.
Поставил на локале trim... тоже не множатся.

Опять сижу и думу думаю. Просматриваю логи...
Проблема акутальна
Olf
 
Сообщения: 36
Зарегистрирован: 01 дек 2008, 17:35
Откуда: Minsk, Belarus

Re: Каждый раз новая сессия

Сообщение egrik » 04 дек 2008, 23:35

Olf писал(а):Согласен.
Что-то не так :(

На локале сессии не множатся... на хосте множатся.
Поставил на локале trim... тоже не множатся.

Опять сижу и думу думаю. Просматриваю логи...
Проблема акутальна


можете ссылку на ресурс дать?
egrik
 
Сообщения: 38
Зарегистрирован: 08 фев 2009, 12:37

Re: Каждый раз новая сессия

Сообщение Olf » 04 дек 2008, 23:46

Ссылка в личке.

Сессии размножаются и при открытии обычных страниц, где просто открывается страница... т.к. я в автолоаде сделал загрузку сессиий.
Olf
 
Сообщения: 36
Зарегистрирован: 01 дек 2008, 17:35
Откуда: Minsk, Belarus

Re: Каждый раз новая сессия

Сообщение egrik » 04 дек 2008, 23:53

Olf писал(а):Ссылка в личке.

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


Кукисы создаются верно, с кодировкой везде все ок, оч. странно. Даже не знаю чем еще помочь, сам по старинке использую CI 1.6.3, а 1.7 - еще даже не смотрел.
egrik
 
Сообщения: 38
Зарегистрирован: 08 фев 2009, 12:37

Re: Каждый раз новая сессия

Сообщение Olf » 04 дек 2008, 23:54

Вот дебуг из лога.
DEBUG - 04.12.2008 20:48:26 --> Config Class Initialized
DEBUG - 04.12.2008 20:48:26 --> Hooks Class Initialized
DEBUG - 04.12.2008 20:48:26 --> URI Class Initialized
DEBUG - 04.12.2008 20:48:26 --> Router Class Initialized
DEBUG - 04.12.2008 20:48:26 --> Output Class Initialized
DEBUG - 04.12.2008 20:48:26 --> Input Class Initialized
DEBUG - 04.12.2008 20:48:26 --> XSS Filtering completed
DEBUG - 04.12.2008 20:48:26 --> Global POST and COOKIE data sanitized
DEBUG - 04.12.2008 20:48:26 --> Language Class Initialized
DEBUG - 04.12.2008 20:48:26 --> Loader Class Initialized
DEBUG - 04.12.2008 20:48:26 --> Helper loaded: url_helper
DEBUG - 04.12.2008 20:48:26 --> Database Driver Class Initialized
DEBUG - 04.12.2008 20:48:26 --> Session Class Initialized
DEBUG - 04.12.2008 20:48:26 --> Helper loaded: string_helper
DEBUG - 04.12.2008 20:48:26 --> Encrypt Class Initialized
ERROR - 04.12.2008 20:48:26 --> Severity: Notice --> unserialize() [<a href='function.unserialize'>function.unserialize</a>]: Error at offset 121 of 144 bytes /home/paprotsk/core/libraries/Session.php 708
DEBUG - 04.12.2008 20:48:26 --> Session routines successfully run
DEBUG - 04.12.2008 20:48:26 --> Encrypt class already loaded. Second attempt ignored.
DEBUG - 04.12.2008 20:48:26 --> Controller Class Initialized
DEBUG - 04.12.2008 20:48:26 --> Config file loaded: config/paprotskaya_admin.php
DEBUG - 04.12.2008 20:48:26 --> Helper loaded: form_helper
DEBUG - 04.12.2008 20:48:26 --> Validation Class Initialized
DEBUG - 04.12.2008 20:48:26 --> Model Class Initialized
ERROR - 04.12.2008 20:48:26 --> 404 Page Not Found --> user/news
DEBUG - 04.12.2008 20:48:36 --> Config Class Initialized
DEBUG - 04.12.2008 20:48:36 --> Hooks Class Initialized
DEBUG - 04.12.2008 20:48:36 --> URI Class Initialized
DEBUG - 04.12.2008 20:48:36 --> Router Class Initialized
DEBUG - 04.12.2008 20:48:36 --> Output Class Initialized
DEBUG - 04.12.2008 20:48:36 --> Input Class Initialized
DEBUG - 04.12.2008 20:48:36 --> Global POST and COOKIE data sanitized
DEBUG - 04.12.2008 20:48:36 --> Language Class Initialized
DEBUG - 04.12.2008 20:48:36 --> Loader Class Initialized
DEBUG - 04.12.2008 20:48:36 --> Helper loaded: url_helper
DEBUG - 04.12.2008 20:48:36 --> Database Driver Class Initialized
DEBUG - 04.12.2008 20:48:36 --> Session Class Initialized
DEBUG - 04.12.2008 20:48:36 --> Helper loaded: string_helper
DEBUG - 04.12.2008 20:48:36 --> Encrypt Class Initialized
DEBUG - 04.12.2008 20:48:36 --> A session cookie was not found.
DEBUG - 04.12.2008 20:48:36 --> Session routines successfully run
DEBUG - 04.12.2008 20:48:36 --> Encrypt class already loaded. Second attempt ignored.
DEBUG - 04.12.2008 20:48:36 --> Controller Class Initialized
DEBUG - 04.12.2008 20:48:36 --> Config file loaded: config/paprotskaya_admin.php
DEBUG - 04.12.2008 20:48:36 --> Helper loaded: form_helper
DEBUG - 04.12.2008 20:48:36 --> Validation Class Initialized
DEBUG - 04.12.2008 20:48:36 --> Model Class Initialized
DEBUG - 04.12.2008 20:48:36 --> File loaded: ../inc/views/login.php
DEBUG - 04.12.2008 20:48:36 --> File loaded: ../inc/views/login_menu.php
DEBUG - 04.12.2008 20:48:36 --> File loaded: ../inc/views/user.php
DEBUG - 04.12.2008 20:48:36 --> Final output sent to browser
DEBUG - 04.12.2008 20:48:36 --> Total execution time: 0.0762


Может будут мысли.

Как бы явно выдает ошибку, что данные в функцию unserialize() в libraries/Session.php - не верные поступают... или что-то Encrypt Class чудит...
Olf
 
Сообщения: 36
Зарегистрирован: 01 дек 2008, 17:35
Откуда: Minsk, Belarus

Re: Каждый раз новая сессия

Сообщение Big_Shark » 05 дек 2008, 02:33

Весь этот переполох из-за magic_quotes_gpc == on
тут несколько решений http://forum.dklab.ru/viewtopic.php?p=93332#93332 и тут есть http://www.controlstyle.ru/articles/pro ... uotes-gpc/
ну и фак http://phpfaq.ru/slashes

ну и мое решения и как я до этого дошел
строка 708 в котрой ошибка такая
Код: Выделить всё
$data = @unserialize(strip_slashes($data)); 

ошибку вызывает unserialize так как strip_slashes портит сериализованый масив
Код: Выделить всё
if ( ! function_exists('strip_slashes'))
{
    function 
strip_slashes($str)
    {
        if (
is_array($str))
        {    
            foreach (
$str as $key => $val)
            {
                
$str[$key] = strip_slashes($val);
            }
        }
        else
        {
            
$str stripslashes($str);
        }
    
        return 
$str;
    }

как мы ведем функция вызывает стандартную функцию stripslashes не проверяя включен ли magic_quotes_gpc или нет
тепе я бы сделал так создал файл хелпера MY_string_helper.php и запихал бы туда следующие
Код: Выделить всё
if (get_magic_quotes_gpc()) 
  
{
        function strip_slashes($str)
        {
            if (is_array($str))
            {    
                foreach 
($str as $key => $val)
                {
                    $str[$key] = strip_slashes($val);
                }
            }
            else
            
{
                $str = stripslashes($str);
            }
        
            return $str
;
        }
    }
    else
    
{
      function strip_slashes($str){return $str;}
    } 

Делаем проверку включен ли get_magic_quotes_gpc если да то слешируем если нет то так и выдаем в том виде в котором и было

P.S. Код не тестировался на животных и его работоспособность не гарантируется вы используете его на свой страх и риск.
Сообщения писалось лишь для того чтобы задать направления и не коим образом не претендует на лучшее решения.
P.S.S а вообще проста в 9 утра на работе разогревал мозг )))
Отвечу на ваши вопросы по CodeIgniter и Kohana3
Благодарности принимаются тут: 41001216991355 (ЯД)
Big_Shark
Модератор
 
Сообщения: 1307
Зарегистрирован: 03 фев 2009, 02:12
Откуда: Владивосток

Re: Каждый раз новая сессия

Сообщение Olf » 05 дек 2008, 17:50

У меня и на сервере и на хосте magic_quotes_gpc = off
Olf
 
Сообщения: 36
Зарегистрирован: 01 дек 2008, 17:35
Откуда: Minsk, Belarus

След.

Вернуться в Сессии и авторизация

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0