Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

Хранение сессий в БД
http://forum.kohanaframework.su/viewtopic.php?f=33&t=563
Страница 1 из 1

Автор:  vova [ 25 янв 2013, 03:44 ]
Заголовок сообщения:  Хранение сессий в БД

Здравствуйте! Я изучаю Кохану и мне нужно хранить сессии в БД, инет магазин не захотел делать, решил соц сеть, чтоб посложнее было :) Соответственно мне нужно создавать сессию и передавать в неё как минимум id пользователя, только когда он авторизовался, но почему то записи в БД появляются просто при обновлении любой страницы когда пользователь даже не авторизован, и при авторизации не могу установить id_user в сессию, выдаёт ошибку - код снизу.

base.php - от него наследуются index и admin; от index - наследуются контроллеры авторизованых пользователей и не авторизованых; admin - контроллеры по управлению сайтом, то есть доступ типа только для меня :)


base.php

Код:
protected $user;
protected $auth;
protected $session;

$this->auth = Auth::instance();
$this->user = $this->auth->get_user();
$this->session = Session::instance();


auth.php action login
Код:
$this->session->set('id_user',$this->user->id);


account.php

Код:
echo $this->session->get('id_user');



если $this->session = Session::instance(); я перенесу в action login то в этом случае id_user добавляется в сессию, но сессия всё равно в БД добавляется, и по уроках он был в базовом классе.

Гуру Коханы - помогите плиз советом что я не так делаю, прост плохо понимаю когда их правильно создавать и т д...(
весь инет уже облазил, практически никто не использует сессии в БД :(

Автор:  vova [ 25 янв 2013, 04:25 ]
Заголовок сообщения:  Re: Хранение сессий в БД

только что вот как сделал:

base.php

Код:
protected $user;
protected $auth;
protected $session;

$this->auth = Auth::instance();
$this->user = $this->auth->get_user();


auth.php action login
здесь в сессию ничег оне заносится

account.php
а на странице акаунта создаю экземпляр, заношу user_id и вывожу, но в контроллере settings.php не получается получить из сессии текущего юзера :(
Код:
$this->session = Session::instance();
$this->session->set('id_user',$this->user->id);
echo $this->session->get('id_user');


и ещё хотел спросить - "$this->user = $this->auth->get_user();" - где хранятся эти данные? я чёто вообще запутался с этими сессиями и с Auth...

мож кто знает хорошую статью или видео, где рассказывается как работать с сессиями в БД и с модулём Auth вместе...

Автор:  Zorato [ 27 янв 2013, 02:33 ]
Заголовок сообщения:  Re: Хранение сессий в БД

Статья по модулю auth: http://kohana3.ru/module/auth
Что касается сессий, то в свое время тоже искал статью чтобы разобраться, но потом осознал, что разобраться в 5 методах можно и без статьи, поэтому особой необходимости в ней просто нет.
П.С. если все же будут какие-то трудности или вопросы - пишите, разберемся.

Автор:  Sergey [ 28 янв 2013, 01:50 ]
Заголовок сообщения:  Re: Хранение сессий в БД

мне последнее время очень любопытно работать с MongoDB. кто нибудь замерял, в чём быстрее писать/читать сессии — SQL или BSON?

Автор:  vova [ 11 фев 2013, 04:20 ]
Заголовок сообщения:  Re: Хранение сессий в БД

Zorato писал(а):
Статья по модулю auth: http://kohana3.ru/module/auth
Что касается сессий, то в свое время тоже искал статью чтобы разобраться, но потом осознал, что разобраться в 5 методах можно и без статьи, поэтому особой необходимости в ней просто нет.
П.С. если все же будут какие-то трудности или вопросы - пишите, разберемся.

согалсен, но просто нету ни одной статья по работе с базой данных... не хочется начинать с быдло-кода, а самому тяжело понять какой принцып и как правильно работать с сессиями если хранить их в БД... если не в напряг - напиши плиз кратенько когда нужно создавать сессию, когда заносить в неё данные и как лучше всего(и быстрее) получать данные с сессий котоыре находятся в БД.
Спасибо большое!

Автор:  Zorato [ 12 фев 2013, 03:16 ]
Заголовок сообщения:  Re: Хранение сессий в БД

Касательно работы с бд:
http://kohana3.ru/module/database
http://kohana3.ru/module/orm
+ статьи на этом сайте
+ блог http://brotkin.ru/
Теперь о сессиях. Когда использовать сессию? Когда тебе нужно временно хранить какие-то данные пользователя - выбранные настройки, язык, валюту, введенное имя и т.п. Что касается открытия сессии - фреймворк все сделает за тебя, тебе достаточно просто использовать методы get, set и delete (если надо).
Код:
Session::instance()->set('user_id', 10);
$user_id = Session::instance()->get('user_id');
Session::instance()->delete('user_id');

Единственное требование - код должен выполниться до вывода html, т.е. в контроллере или в крайнем случае в модели, но никак не в виде.

Как хранить сессии? В принципе, в 99% случаев хватает стандартного механизма php, т.е. хранить в БД не требуется, производительности и быстродействия хватает и так. Поэтому и заморачиваться с БД не вижу смысла, но если очень хочется, то http://kohanaframework.org/3.3/guide/ko ... se-adapter .

Автор:  Sergey [ 12 фев 2013, 18:37 ]
Заголовок сообщения:  Re: Хранение сессий в БД

Zorato писал(а):
В принципе, в 99% случаев хватает стандартного механизма php, т.е. хранить в БД не требуется, производительности и быстродействия хватает и так.


В принципе, не хватает стандартного механизма. И это сегодня 99%, завтра их может стать 66% ;) И вообще, то, что сегодня подавляющее большинство пользуется одним способом, не говорит мне о том, что я не должен владеть другим способом или не должен понимать принципиальные отличия одного от другого.

А хранить в БД сессии или нет, требуется оно или нет, диктует конкретное решение конкретной задачи. Насчёт производительности я бы с вами поспорил, жаль вы не знаете что такое производительность MongoDB - спорить не о чем.

Отсутствие предопределенной схемы несет с собой некоторые преимущества. Во-первых, структуру данных определяет код приложения, а не база. Это позволяет ускорить разработку на ранних этапах, когда схема часто изменяется. Во-вторых, и это куда важнее, безсхемная модель позволяет представить данные с переменным набором свойств.

У меня написан не один модуль для Gleez CMS использующий MongoDB, но я до сих пор не проводил тесты. Хотя на официальном сайте говорится что MongoDB быстрее MySQL

Автор:  vova [ 17 фев 2013, 04:25 ]
Заголовок сообщения:  Re: Хранение сессий в БД

Zorato, у меня основная пробелма в том что я при запуске стартовой страницы определяю - Auth::instance()
в любом случае, авторизорван пользователь или нет, чтоб когда человек заходит на главную страницу то сразу проверялось - авторизован он или нет и соответственно показывается страница для авторизации или же редирект если авторизован, и в меня в БД всегда создаётся сессия, даже когда не авторизованый пользователь заходит чтоб авторизватся, а это мне совсем не нужно, так как лишняя запись в бд а так же сессия... надеюсь поймёшь о чём я...

З.Ы. мож кто уже реализовывал работу с сессиями в БД, когда создаётся сессия только для авторизованого пользователя - то напишите плиз по какому принцыпу устроена у вас структура

Автор:  Sergey [ 17 фев 2013, 13:39 ]
Заголовок сообщения:  Re: Хранение сессий в БД

структура чего вас интересует?

Автор:  vova [ 18 фев 2013, 06:25 ]
Заголовок сообщения:  Re: Хранение сессий в БД

всё, уже сам розжевал этот модуль до мелочей))
Только мой старый вопрос остаётся открытым - почему Кохана может мне создавать сессию просто так при заходе на сайт, то есть: зашли на сайт и создалась почему то сессия, если авторизовался то создаётся новая что само собой должно быть, и после logout эта сессия дял пользователя удаляет, но для неавторизованого создаётся опять новая не понятно почему... мож кто подскажет в чём я туплю?)

методом тыка нашёл ответ - обычная проверка if(Auth::instance()->logged_in()) создаёт сессию, и именно она 100% создаёт, фантастика...

Страница 1 из 1 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/