Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 29 мар 2024, 01:37

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Хранение сессий в БД
СообщениеДобавлено: 25 янв 2013, 03:44 
Не в сети
Зеленый

Зарегистрирован: 25 янв 2013, 03:21
Сообщения: 9
Здравствуйте! Я изучаю Кохану и мне нужно хранить сессии в БД, инет магазин не захотел делать, решил соц сеть, чтоб посложнее было :) Соответственно мне нужно создавать сессию и передавать в неё как минимум 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 добавляется в сессию, но сессия всё равно в БД добавляется, и по уроках он был в базовом классе.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение сессий в БД
СообщениеДобавлено: 25 янв 2013, 04:25 
Не в сети
Зеленый

Зарегистрирован: 25 янв 2013, 03:21
Сообщения: 9
только что вот как сделал:

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 вместе...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение сессий в БД
СообщениеДобавлено: 27 янв 2013, 02:33 
Не в сети
Бывалый

Зарегистрирован: 29 сен 2012, 00:30
Сообщения: 65
Откуда: Рига, Латвия
Статья по модулю auth: http://kohana3.ru/module/auth
Что касается сессий, то в свое время тоже искал статью чтобы разобраться, но потом осознал, что разобраться в 5 методах можно и без статьи, поэтому особой необходимости в ней просто нет.
П.С. если все же будут какие-то трудности или вопросы - пишите, разберемся.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение сессий в БД
СообщениеДобавлено: 28 янв 2013, 01:50 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
мне последнее время очень любопытно работать с MongoDB. кто нибудь замерял, в чём быстрее писать/читать сессии — SQL или BSON?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение сессий в БД
СообщениеДобавлено: 11 фев 2013, 04:20 
Не в сети
Зеленый

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение сессий в БД
СообщениеДобавлено: 12 фев 2013, 03:16 
Не в сети
Бывалый

Зарегистрирован: 29 сен 2012, 00:30
Сообщения: 65
Откуда: Рига, Латвия
Касательно работы с бд:
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 .


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение сессий в БД
СообщениеДобавлено: 12 фев 2013, 18:37 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Zorato писал(а):
В принципе, в 99% случаев хватает стандартного механизма php, т.е. хранить в БД не требуется, производительности и быстродействия хватает и так.


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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение сессий в БД
СообщениеДобавлено: 17 фев 2013, 04:25 
Не в сети
Зеленый

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение сессий в БД
СообщениеДобавлено: 17 фев 2013, 13:39 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
структура чего вас интересует?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Хранение сессий в БД
СообщениеДобавлено: 18 фев 2013, 06:25 
Не в сети
Зеленый

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

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


Последний раз редактировалось Sergey 18 фев 2013, 13:40, всего редактировалось 1 раз.
обернул исходники в [code]


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group