Сохранение данных в сессии

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
yegor
Сообщения: 26
Зарегистрирован: 2009.08.31, 10:44

Сохранение данных в сессии

Сообщение yegor »

Нужно неконфидециальный параметр хранить в сессии, как можно сохранить его, как я и предполагал, стандартное присваивание к массиву $_SESSION не работает. Мне нужно сохранить простое число, для этого никаких классов расширять не нужно. Доступ к этому числу будет через контроллер, в котором и сохранение планируется. Подскажите, может есть какой метод контроллера или простенький класс для работы с сессией. Примеры будут не лишними. Заранее спасибо.
Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: Сохранение данных в сессии

Сообщение Caveman »

Эмм... А чем не нравится класс CHttpSession?
yegor
Сообщения: 26
Зарегистрирован: 2009.08.31, 10:44

Re: Сохранение данных в сессии

Сообщение yegor »

My english is not so good

Вот такой код

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

$session = new CHttpSession;
$session->open();
$session['data'] = 'qwe';
print_r($session);
 
Дает такой резальтат

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

CHttpSession Object ( [autoStart] => 1 [behaviors] => Array ( ) [_initialized:private] => [_e:private] => [_m:private] => ) 
yegor
Сообщения: 26
Зарегистрирован: 2009.08.31, 10:44

Re: Сохранение данных в сессии

Сообщение yegor »

Тем не менее, сейчас еще поигрался с вышеупомянутым классом и понял, что он работает. Только, вероятно, данные кэшируются и не всегда идет корректное отображение данных. Мне же нужно, чтобы данные были динамичными и вообще не кэшировались, так как я работаю с контроллером аякса. Можно как-нибудь отключить кэширование конкретного контроллера?
Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: Сохранение данных в сессии

Сообщение Caveman »

yegor писал(а):Можно как-нибудь отключить кэширование конкретного контроллера?
Можно предотвратить кэширование некоего куска - кэширование динамического содержимого
Аватара пользователя
yii
Сообщения: 122
Зарегистрирован: 2010.04.29, 10:40

Re: Сохранение данных в сессии

Сообщение yii »

А как получить данные сессии из другого экшина или контроллера?
Делаю так:

в index.php:
$session = new CHttpSession;
$session->open();

в контроллере:

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

public function actionIndex() {
$session['user_id'] = 22222;
print_r($session['user_id']); //в данном случае выводится 22222
...
}
public function actionTest() {
var_dump($session['user_id']); //а вот здесь уже выводится NULL
...
} 
Аватара пользователя
yii
Сообщения: 122
Зарегистрирован: 2010.04.29, 10:40

Re: Сохранение данных в сессии

Сообщение yii »

Вобщем не знаю правильно так делать или нет, но смог добраться только так: Yii::app()->session['user_id'];
Тогда еще 1 вопрос, где (в каком файле) и когда лучше стартовать сессию?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Сохранение данных в сессии

Сообщение samdark »

При обращении к Yii::app()->session сессия стартует автоматом.
Аватара пользователя
painfulangel
Сообщения: 19
Зарегистрирован: 2011.05.31, 15:17
Откуда: Санкт-Петербург

Re: Сохранение данных в сессии

Сообщение painfulangel »

Подскажите пожалуйста.
Может ли Yii::app()->session или или CHttpSession сохранять в себя многомерные массивы.
Если да, то каким образом.

пробовал сохранить двумя способами:
1)

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

$session = new CHttpSession();
            $session->open();
            $session['hw'][] = 'hello world';  
2)

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

Yii::app()->session['hw'][]='hello world'; 
посмотрел форум. но таких задач/примеров ни у кого не нашел
byteasdf
Сообщения: 99
Зарегистрирован: 2010.09.15, 09:01

Re: Сохранение данных в сессии

Сообщение byteasdf »

painfulangel писал(а):Подскажите пожалуйста.
Может ли Yii::app()->session или или CHttpSession сохранять в себя многомерные массивы.
Если да, то каким образом.

пробовал сохранить двумя способами:
1)

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

$session = new CHttpSession();
            $session->open();
            $session['hw'][] = 'hello world';  
2)

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

Yii::app()->session['hw'][]='hello world'; 
посмотрел форум. но таких задач/примеров ни у кого не нашел
Точно должно работать такое

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

$a  = Yii::app()->session['hw'];
$a[] = 'hello world';
Yii::app()->session['hw'] = $a;
 
То что вы написали не работает в связи с тем, что у нас не прямой доступ к массиву, а через интерфейс ArrayAccess. И в результате оно сначала получает копию значения и дальнейшие операции осуществляет уже на этой копии.
Аватара пользователя
painfulangel
Сообщения: 19
Зарегистрирован: 2011.05.31, 15:17
Откуда: Санкт-Петербург

Re: Сохранение данных в сессии

Сообщение painfulangel »

Спасибо большое!
Все получилось.
samuray_jr
Сообщения: 2
Зарегистрирован: 2011.10.31, 23:25

Re: Сохранение данных в сессии

Сообщение samuray_jr »

Пытаюсь сохранять данные в сессии данные формы между шагами(Форма заполняется в несколько шагов).

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

    private function save ($step, $data)
    {
        Yii::app()->session->add($step, $data);
    }                    
    
    private function read ($step)
    {
         Yii::app()->session->itemAt($step);
    }
 
Если я получил данные POST, такой тестовый код работает

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

            if(isset($_POST['_Form'])){
                $model->attributes = $_POST['_Form'];
                $this->save('step1', $model->attributes);
                $model->attributes = $this->read ('step1');

 


а если я перешел на второй шаг GET - ом редиректом с первого шага

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

         $temp = $this->read('step1');
          echo $temp['id'];
  

ничего не считывается.
mess@nger
Сообщения: 54
Зарегистрирован: 2012.06.25, 14:32
Откуда: Житомир

Re: Сохранение данных в сессии

Сообщение mess@nger »

чего то недопонимаю, или просто торможу, разбираюсь с сессиями
для примера во вьюхе:

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

    <?php
        Yii::app->session['cart_coast']=1;  // - 27я строка
        Yii::app->session['products_incart']=2;
        echo Yii::app->session['cart_coast'];
        echo Yii::app->session['products_incart'];
    ?>
ответ

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

Parse error: syntax error, unexpected T_OBJECT_OPERATOR in Z:\home\sushi.local\www\protected\components\views\smcart.php on line 27
mess@nger
Сообщения: 54
Зарегистрирован: 2012.06.25, 14:32
Откуда: Житомир

Re: Сохранение данных в сессии

Сообщение mess@nger »

Вот так работает:

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

        $session=new CHttpSession;
        $session->open();
        $session['1']=1;
        echo $session['1'];
 
Что делать чтобы работало тогда вот так:
byteasdf писал(а): Точно должно работать такое

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

$a  = Yii::app()->session['hw'];
$a[] = 'hello world';
Yii::app()->session['hw'] = $a;
?
mess@nger
Сообщения: 54
Зарегистрирован: 2012.06.25, 14:32
Откуда: Житомир

Re: Сохранение данных в сессии

Сообщение mess@nger »

блин, нашел, нужно поспать по ходу
Yii::app()
а не
Yii::app
igosja
Сообщения: 4
Зарегистрирован: 2015.01.30, 17:03

Re: Сохранение данных в сессии

Сообщение igosja »

Попал на эту тему, когда сам столкнулся с сессиями в Yii.
Прочитал это все и теперь думаю, зачем так все усложнять? Ведь есть простая запись

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

$_SESSION['var'] = $value; 
но нет, разработчики Yii эту конструкцию отключили и теперь для записи капчи в сессию, нужно стучать туда через ООП.
Я большой сторонник KISS-принципа, и для меня такие вещи "страшнее атомной войны", как говорится.
Последний раз редактировалось igosja 2015.11.19, 11:08, всего редактировалось 1 раз.
Аватара пользователя
flashimage
Сообщения: 1517
Зарегистрирован: 2011.01.23, 12:43

Re: Сохранение данных в сессии

Сообщение flashimage »

разработчики Yii эту конструкцию отключили
Чего?
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
igosja
Сообщения: 4
Зарегистрирован: 2015.01.30, 17:03

Re: Сохранение данных в сессии

Сообщение igosja »

flashimage писал(а):Чего?
Берем IndexController и пишем в нем:

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

public function actionSetsession()
{
    session_start();
    $_SESSION['var'] = 1;
}

public function actionGetsession()
{
    session_start();
    print $_SESSION['var'];
}
Открываем в браузере сначала
site_url/index/setsession
потом
site_url/index/getsession
Во второй вкладке по хорошему должно вывести "1", но нет, пишет "Undefined variable: _SESSION".
Добро пожаловать в мир веб-разработки.
Аватара пользователя
flashimage
Сообщения: 1517
Зарегистрирован: 2011.01.23, 12:43

Re: Сохранение данных в сессии

Сообщение flashimage »

Во второй вкладке по хорошему должно вывести "1", но нет, пишет "Undefined variable: _SESSION".
Добро пожаловать в мир веб-разработки.
Вот это да!!! Надо тогда предупредить всех разработчиков, чтобы прекратили использовать эту черную магию
https://github.com/thyseus/yii-user-man ... um.php#L82
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
Ответить