сессии и куки в yii

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
xoma_204
Сообщения: 318
Зарегистрирован: 2013.12.12, 02:06

сессии и куки в yii

Сообщение xoma_204 »

Подскажите пожалуйста как работать с сесииями в yii?
В интете не одного толкового примера не нашел.
Напишите плз
1)как создать 2 разных сессии и поместить туда значения?
2)как создать куки у посетителя сайта и помещать в них значения?
3)как потом доставить эти значения из сессий и куков?
4)как в js-файлах брать значения их сессий? например при ajax-запросах
Заранее благодарю за ответы
Great
Сообщения: 70
Зарегистрирован: 2011.07.27, 11:31

Re: сессии и куки в yii

Сообщение Great »

Сессии: http://www.yiiframework.com/doc/api/1.1/CHttpSession. Обращаться к сессии можно так: Yii::app()->session.
Куки: http://www.yiiframework.com/doc/api/1.1 ... Collection. Обращаться к кукам можно так: Yii::app()->request->cookies. Как создавать - описано в документации.

Как из js доставать увы, не помню, но это легко гуглится.
xoma_204
Сообщения: 318
Зарегистрирован: 2013.12.12, 02:06

Re: сессии и куки в yii

Сообщение xoma_204 »

читал но там на английском
xoma_204
Сообщения: 318
Зарегистрирован: 2013.12.12, 02:06

Re: сессии и куки в yii

Сообщение xoma_204 »

напишите плз конкретный пример, чтобы понятно было что какая строчка означает. А то так не понятно в теории, да еще и на английском
xoma_204
Сообщения: 318
Зарегистрирован: 2013.12.12, 02:06

Re: сессии и куки в yii

Сообщение xoma_204 »

ладно спрошу более конкретно вот есть контролер all_news пишу в нем

Код: Выделить всё

public function all_news()
    {
                $session=new CHttpSession;
                $session->open();
            print_r($session);
        $this->render('/index');
    } 
Все выводит
далее, хочу получить значиения сессии в другом контролеере all_video

Код: Выделить всё

public function all_news()
    {
                $session=new CHttpSession;
                $session->open();
            print_r($session);
        $this->render('/index');
    } 
2 раза повторяется одно и то же

Код: Выделить всё

            $session=new CHttpSession;
                $session->open(); 
Как сделать так чтобы просто можно было бы написать?тем самым получив доступ к переменным сессий

Код: Выделить всё

    print_r($session); 
Аватара пользователя
Apache02
Сообщения: 50
Зарегистрирован: 2014.02.09, 01:14

Re: сессии и куки в yii

Сообщение Apache02 »

Вообщето изначально есть сессия у текущего пользователя.

Код: Выделить всё

Yii::app()->user->setState('key', 'value'); // выставить значение для key
Yii::app()->user->getState('key'); // прочитать значение key из сессии пользователя
http://www.yiiframework.com/doc/api/1.1 ... ate-detail
http://www.yiiframework.com/doc/api/1.1 ... ate-detail

Как работать с другой сессией я не знаю.
xoma_204
Сообщения: 318
Зарегистрирован: 2013.12.12, 02:06

Re: сессии и куки в yii

Сообщение xoma_204 »

Apache02 писал(а):Вообщето изначально есть сессия у текущего пользователя.

Код: Выделить всё

Yii::app()->user->setState('key', 'value'); // выставить значение для key
Yii::app()->user->getState('key'); // прочитать значение key из сессии пользователя
 
http://www.yiiframework.com/doc/api/1.1 ... ate-detail
http://www.yiiframework.com/doc/api/1.1 ... ate-detail

Как работать с другой сессией я не знаю.
А что это за класс такой user??
Yii::app()->user - как он связан с сесиями???
я думал за сессии отвечает класс CHttpSession????разве нет???или я не прав??уже совсем запутался
Аватара пользователя
Apache02
Сообщения: 50
Зарегистрирован: 2014.02.09, 01:14

Re: сессии и куки в yii

Сообщение Apache02 »

xoma_204 писал(а):А что это за класс такой user??
Yii::app()->user - как он связан с сесиями???
я думал за сессии отвечает класс CHttpSession????разве нет???или я не прав??уже совсем запутался
1. CWebUser
2. Он использует стандартный механизм php сессий. http://www.php.net/manual/ru/reserved.v ... ession.php
3. Отвечает. Его нужно использовать если собираетесь использовать отдельный механизм сессий, не связанный с сессией текущего пользователя. Для специфичных задач.

В Class Reference очень удобно сделаны вырезки из исходников фреймворка. У каждой функции, описание которой читаете, можно посмотреть исходник прямо из документации. Очень помогает.
xoma_204
Сообщения: 318
Зарегистрирован: 2013.12.12, 02:06

Re: сессии и куки в yii

Сообщение xoma_204 »

Apache02 писал(а):
xoma_204 писал(а):Отвечает. Его нужно использовать если собираетесь использовать отдельный механизм сессий, не связанный с сессией текущего пользователя. Для специфичных задач.
что это значит??? не понятно
что значит отдельный механизм сессий не связанный с сессией текущего пользователя??
Сессия же она уникальная для всех, не понятно это предложение
Аватара пользователя
Apache02
Сообщения: 50
Зарегистрирован: 2014.02.09, 01:14

Re: сессии и куки в yii

Сообщение Apache02 »

Сессия это блок данных (массив), который хранится на стороне сервера. Чтобы получить доступ к этим данным нужно знать идентификатор сессии.
PHP предоставляет уже готовый (прозрачный для разработчика) механизм одной сессии:
* Идентификатор сессии хранится в cookies
* При обращении к странице php читает данные текущей сессии или создает новую (если небыло идентификатора) и выдает идентификатор в куках
* Данные сессии хранятся в суперглобальном массиве $_SESSION
Yii использует описанный выше механизм. Его достаточно для подавляющего большинства задач.

Если ОДНА ТЕКУЩАЯ сессия не устраивает, то городите велосипед. Помочь в этом может CHttpSession.
Просмотрел код CHttpSession. Дефолтно это интерфейс ко все той же текущей сессии, но есть возможность расширения. Не уверен, что можно завести 2 экземпляра CHttpSession в пределах одного скрипта.
xoma_204
Сообщения: 318
Зарегистрирован: 2013.12.12, 02:06

Re: сессии и куки в yii

Сообщение xoma_204 »

Apache02 писал(а):Сессия это блок данных (массив), который хранится на стороне сервера. Чтобы получить доступ к этим данным нужно знать идентификатор сессии.
PHP предоставляет уже готовый (прозрачный для разработчика) механизм одной сессии:
* Идентификатор сессии хранится в cookies
* При обращении к странице php читает данные текущей сессии или создает новую (если небыло идентификатора) и выдает идентификатор в куках
* Данные сессии хранятся в суперглобальном массиве $_SESSION
Yii использует описанный выше механизм. Его достаточно для подавляющего большинства задач.
Я правильно понимаю?
Человек заходи на сайт -> создается txt файл на сервере ->создается кука у посетителя->из это куки берем уник id соединияем с txt фаликом -> в txt файлике(сессии) находим нужные нам данные -> после закрытия браузера удаляется кука у посетителя и удаляется txt файлик на сервере
Так???
И если нет напишите плз так же по шагам как и что происходит
Я то думал сессии никак не связаны с куками
Аватара пользователя
Apache02
Сообщения: 50
Зарегистрирован: 2014.02.09, 01:14

Re: сессии и куки в yii

Сообщение Apache02 »

Примерно.
1. Человек заходит на сайт (первый раз) -> генерируется уникальный ID -> на сервере создается txt файлик с именем sess_{ID} -> выдается команда браузеру запомнить куку с ID -> переходим к пункту 2.
2. В файлике(сессии) находим нужные нам данные -> Конец.
3. Человек заходит на сайт -> если нет куки, то переходим к пункту 1 -> иначе получаем из куки ID -> ищем файлик sess_{ID} -> если его нет, то переходим к пункту 1 -> переходим к пункту 2.
После закрытия браузера кука возможно удаляется (зависит от настроек браузера и ответов сервера). Сервер может указать браузеру хранить куку после закрытия браузера (так работает галочка "запомнить" при авторизации).
После закрытия браузера файлик сессии точно не удаляется с сервера. Возможно есть механизм, удаляющий устаревшие файлы позже.
Место хранения данных сессии может быть перенастроено например на MySQL или Memcached.

Проблема в том, что между переходами по страницам сайта соединение клиент-сервер рвется, поэтому нет возможности хранить сессию между разными запросами иначе. Поэтому браузеру выдается кука с идентификатором сессии.
andry
Сообщения: 224
Зарегистрирован: 2009.11.08, 16:52

Re: сессии и куки в yii

Сообщение andry »

подскажите, как удалить значение сессии. Для получения я использую

Код: Выделить всё

Yii::app()->user->getState('menuActive')
для записи я использую

Код: Выделить всё

Yii::app()->user->setState('menuActive', $val);
но пытаюсь удалить значение таким образом

Код: Выделить всё

Yii::app()->user->getState('menuActive',null);
почему-то не срабатывает, или есть другой способ?
Аватара пользователя
Haku
Сообщения: 58
Зарегистрирован: 2015.03.11, 07:39

Re: сессии и куки в yii

Сообщение Haku »

Удалить конкретную сессию:

Код: Выделить всё

unset(Yii::app()->session['menuActive']);
Удалить все сессии:

Код: Выделить всё

Yii::app()->session->clear();
AlexGas
Сообщения: 24
Зарегистрирован: 2013.05.13, 22:55

Re: сессии и куки в yii

Сообщение AlexGas »

Код: Выделить всё

Yii::app()->user->setState('menuActive', null);
или просто

Код: Выделить всё

Yii::app()->user->setState('menuActive');
andry
Сообщения: 224
Зарегистрирован: 2009.11.08, 16:52

Re: сессии и куки в yii

Сообщение andry »

AlexGas, ваш пример работает, спасибо)
Ответить