Внимание! Форум временно закрыт. Все вопросы вы можете задать на странице MaxSite CMS в Github

Логиним комюзера через сессию

Только для тех, кто понимает.
Аватар пользователя
Wave
Сообщений: 1218
Зарегистрирован: 01 фев 2009, 17:38

Re: Логиним комюзера через сессию

Сообщение Wave » 02 авг 2014, 13:53

Для комьюзера в куках хранится и сессия, и данные комьюзера. И ещё чего-нибудь может, например, данные форума. В итоге часто встречаются жалобы на 502 ошибку при логине комьюзера. Доходило до того, что на шаред-хостингах специально для меня отключали nginx, потому что никакие увеличения буферов под заголовки запросов не давали надёжного избавления от 502 ошибки.
Кроме того в грядущей версии CI3 отказались от хранения сессий в куках, перевели на базу данных\memcached.

Может вы могли бы изложить ваши мысли с примерами кода на http://maxhub.ru
Лучше форк на гитхабе.

Аватар пользователя
vimruler
Сообщений: 401
Зарегистрирован: 13 май 2009, 09:31

Re: Логиним комюзера через сессию

Сообщение vimruler » 02 авг 2014, 14:02

Wave писал(а):Кроме того в грядущей версии CI3 отказались от хранения сессий в куках, перевели на базу данных\memcached.


Да, в CI3 сессии обещают иначе хранить, так что всё равно придётся переделывать.

Wave писал(а):
Может вы могли бы изложить ваши мысли с примерами кода на http://maxhub.ru
Лучше форк на гитхабе.

Да хоть как-нибудь бы уже выкладывали, а то больше разговоров и «хомячинья»... :twisted:

Аватар пользователя
MAX
Администратор
Сообщений: 3179
Зарегистрирован: 31 янв 2009, 19:02

Re: Логиним комюзера через сессию

Сообщение MAX » 02 авг 2014, 14:56

В CodeIgniter 3 просто сессиями называются php-сессии, а не «куковские», как это было ошибочно названо. Класс Session.

Возможность хранить сессии в БД давным давно присутствует в CodeIgniter:
http://code-igniter.ru/user_guide/libra ... sions.html

skeet
Сообщений: 46
Зарегистрирован: 28 мар 2013, 11:00

Re: Логиним комюзера через сессию

Сообщение skeet » 02 авг 2014, 16:26

Чем грозит отказ от кук? Дополнительным 1-2 запросами к БД? Это будет не совсем хорошим дополнением к нагрузке на сервер и SQL (посещаемость моего ресурса 20к человек в сутки).

Аватар пользователя
MAX
Администратор
Сообщений: 3179
Зарегистрирован: 31 янв 2009, 19:02

Re: Логиним комюзера через сессию

Сообщение MAX » 02 авг 2014, 19:22

Никто от кук не отказывается. Переходить на сессии пока нет никакого резона.

RomanS
Сообщений: 140
Зарегистрирован: 25 апр 2011, 19:15

Re: Логиним комюзера через сессию

Сообщение RomanS » 04 авг 2014, 19:19

Передавать мыло по куку - не удачная мысль, поэтому я хочу перевести их в php сессию, как у юзеров (они же не через БД работают). Но у меня почему то затирает сессию, где это происходит. Тупо открываю сессию, обновляю страницу - сессия пуста.

md5 - сейчас дешифруется минут за 5ть. если кто не вкурсе:)

Профилирование - необходимо провести, оно как раз и укажит на узкие места в самом коде и запросах к БД. Ну вот пример замены палагинации:

$CI->db->select('SQL_BUFFER_RESULT count(*) as count', false);
...
$query = $CI->db->get();

$pag_row = 0;

if ($query->num_rows() > 0)
{
$pag_row = $query->row(0);
$pag_row = $pag_row->count;
}

Вот теперь, мне не нужно запрашивать гиганский массив с БД, а потом подсчитывать количество полей $query->num_rows() да ещё и заставлять все это висеть в памяти БД (SQL_BUFFER_RESULT)

И т.д. ну вот в выводи вы получили с базы 250К, из данных вы еще сделали массив 250КБ т.е. уже 500Кб памяти использовано, дальше мы прокрутили этот массив и оставили висеть в памяти, ну после обработки массива надо всегда ставить unset - для освобождения памяти, у нас в базе жирный контент хранится - зачем он висит. Это кстати и к классам вывода page-out контента относится. Учитавайте ещё, что классы на 30% в phpувеличивают ресурсо потребление!

На апдейтах баз - в большей части отсутствуют limit - нам нужно обновить одно полё, а мы всю базу прокручиваем, даже поле того как обновили.

Аватар пользователя
MAX
Администратор
Сообщений: 3179
Зарегистрирован: 31 янв 2009, 19:02

Re: Логиним комюзера через сессию

Сообщение MAX » 04 авг 2014, 21:50

Сессии в CodeIgniter — это куки. Причем шифрованные. Там далеко не md5 используется. Когда пишется

Код: Выбрать все

$CI->session->set_userdata
, то это не php-сессия, а куки. Ссылку на библиотеку дал выше.

Профилирование sql-запросов, да, проводилось. Серьезное. Выявили много «хвостов». Если у вас есть какие-то пожелания, то можно обсудить. Но нужна конкретика: запрос исходный, его профилирование, модифицированный запрос и его новое профилирование, разница.

Касаемо count в пагинации. Я, конечно, на больших данных его не имею возможности спрофилировать и сказать точно, но результат по $query->num_rows() возвращается через mysql_num_rows(), то есть на уровне драйвера mysql. Это очень быстрые функции, вкупе с индексированными полями таблиц, скорее всего сведут выигрыш от варианта с COUNT на нет. Если уж и оптимизировать вызов пагинации, то только через использование FOUND_ROWS() (см. mso_sql_found_rows()).

И т.д. ну вот в выводи вы получили с базы 250К, из данных вы еще сделали массив 250КБ т.е. уже 500Кб памяти использовано, дальше мы прокрутили этот массив и оставили висеть в памяти, ну после обработки массива надо всегда ставить unset - для освобождения памяти, у нас в базе жирный контент хранится - зачем он висит.


AR в CodeIgniter работает по-другому. В памяти остается только последний sql-запрос (это естественно). Никакой unset там не нужен. Тем более, что эта функция удаляет переменную, использовать имеет смысл только в купе с isset. А сброс данных предыдущего sql-запрос и так работает автоматом.

PHP сам по себе так устроен, что его память автоматом очищается сразу после выполнения скрипта. Если и говорить об оптимизации, то есть смысл использовать PHP FCGI на сервере, а также включить eAcelerator.


Вернуться в «if (!is_type('Programmer')) die('not for you');»

Кто сейчас на форуме

Пользователь просматривает форум: нет зарегистрированных пользователей

cron