ФорумПрограммированиеPHP для идиотов → Yii 1.1 - Хранение PHPSESSION в Redis (клиент predis

Yii 1.1 - Хранение PHPSESSION в Redis (клиент predis

  • NewEXE

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 25 января 2015 г. 15:46

    Доброго времени суток.
    Для прохождения собеседования дали задание, его часть - хранить сессии в Redis. А я, блять, его нихуя не знаю.
    Помогите кто чем может, на пенёк не садитесь

    Кому, интересно, говнокод в модели
    Модифицирую стандартную LoginForm модель. Авторизация у меня без пароля. Если юзер уже авторизован и пытается еще раз - метод возвращает false. По истечении сессии все данные о юзере (session['username'], хеш редиса) уничтожаются.

    public function login()
    {
    $redis = new Predis\Client();

    if(!$redis->exists($this->username)) //Если юзер не был авторизован
    {
    $duration = 3600*24; //для сессии и уничтожения $redis->exists($this->username)

    Yii::app()->session['username'] = $this->username;
    //тут нужно сохранить phpsession в redis на $duration секунд

    //состояние юзера храню в redis, хешем
    $redis->hmset($this->username, array(
    'inClass' => 1,
    'handUp' => 0,
    )
    );
    $redis->expireat($this->username, $duration); //удалить данные о юзере по истечении
    return true;
    }
    else
    return false;
    }
    Это наша точка
  • Sinkler

    Сообщения: 9658 Репутация: N Группа: в ухо

    Spritz 25 января 2015 г. 15:49, спустя 2 минуты 27 секунд

    а что не получается-то?

  • phpdude

    Сообщения: 26618 Репутация: N Группа: в ухо

    Spritz 25 января 2015 г. 15:55, спустя 6 минут 39 секунд

  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 25 января 2015 г. 16:25, спустя 30 минут 1 секунду

    **@NewEXE**, https://github.com/phpredis/phpredis#php-session-handler

    @phpdude, а так быстрее работает, чем ручками пихать?
  • phpdude

    Сообщения: 26618 Репутация: N Группа: в ухо

    Spritz 25 января 2015 г. 16:46, спустя 20 минут 55 секунд

    @NewEXE, https://github.com/phpredis/phpredis#php-session-
    handler

    @phpdude, а так быстрее работает, чем ручками пихать?

    @kostyl, ну что за тупой вопрос? как сам думаешь?

    Сапожник без сапог
  • NewEXE

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 25 января 2015 г. 17:37, спустя 50 минут 44 секунды

    @phpdude, спасибо, на лету менять стандартный конфиг пыхи я не подумал!
    @kostyl, а как можно ручками запихнуть?
    Это наша точка
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 25 января 2015 г. 17:56, спустя 19 минут 9 секунд

    > > **@NewEXE**, [https://github.com/phpredis/phpredis#php-session-
    > handler](https://github.com/phpredis/phpredis#php-session-handler)
    >
    > **@phpdude**, а так быстрее работает, чем ручками пихать?
    >

    **@kostyl**, ну что за тупой вопрос? как сам думаешь?

    @phpdude, я просто люблю спрашивать на всякий случай ;)

    @phpdude, спасибо, на лету менять стандартный конфиг пыхи я не подумал!
    @kostyl, а как можно ручками запихнуть?

    @NewEXE, ну как обычное значение, я думаю тебе так и надо, потому что конфиги на лету никто не меняет
  • NewEXE

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 25 января 2015 г. 18:01, спустя 4 минуты 36 секунд

    @kostyl, хранить, как обычную пару ключ->значение? Если да, то каким образом, приведи код
    Это наша точка
  • Ivan.

    Сообщения: 494 Репутация: N Группа: Адекваты

    Spritz 25 января 2015 г. 18:03, спустя 2 минуты 13 секунд

  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 25 января 2015 г. 18:05, спустя 1 минуту 39 секунд

    @kostyl, хранить, как обычную пару ключ->значение? Если да, то каким образом, приведи код

    @NewEXE, я не знаю каким образом, наверно надо как написано в документации, в той же где про сессию
  • NewEXE

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 25 января 2015 г. 18:16, спустя 10 минут 54 секунды

    @kostyl, ну завтра попробую уже, как за ноут сяду. Спросил, потому что 1) та документация от phpredis, не факт, что запашет с predis и 2) в ней предлагают поменять конфиг, только, сам понимаешь, на хостинге это можно только через ini_set() сделать, т.е., на лету
    http://try.redis.io

    @Ivan., спасибо, пиздец как информативно
    Это наша точка
  • NewEXE

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 26 января 2015 г. 3:51, спустя 9 часов 35 минут 10 секунд

    **@NewEXE**, https://github.com/phpredis/phpredis#php-session-handler

    @phpdude, прописал в корневом index.php ( там, где у людей лежит require_once($yii); Yii::createWebApplication($config)->run(); ) вот это:
    ini_set('session.save_handler', 'redis');

    На всех страницах сайта
    Warning: ini_set(): Cannot find save handler 'redis' in C:\Winginx\home\classroom.local\public_html\index.php on line 11

    это работало бы с phpredis, наверное; нужно искать рецепт для predis.
    Это наша точка
  • phpdude

    Сообщения: 26618 Репутация: N Группа: в ухо

    Spritz 26 января 2015 г. 3:52, спустя 1 минуту 30 секунд

    @NewEXE, ну полагаю что нужно установить расширение то для пхп. как думаешь?)

    Сапожник без сапог
  • NewEXE

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 26 января 2015 г. 4:32, спустя 39 минут 48 секунд

    **@NewEXE**, как думаешь?)

    @phpdude, стараюсь головой, но не всегда получается.
    Что-то не догнал, какое расширение? Может, свой save hundler как-то написать?
    Это наша точка
  • NewEXE

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 26 января 2015 г. 6:16, спустя 1 час 43 минуты 35 секунд

    Накурился манов, пока ждал ответа.
    Самое интересное, когда я прописываю в конфиге так:

    'components'=>array(

    'session' => array(
    'class' => 'application.components.RedisSessionManager',
    'autoStart' => true,
    'cookieMode'=>'none', //set php.ini to session.use_cookies = 0, session.use_only_cookies = 0
    'useTransparentSessionID' => true, //set php.ini to session.use_trans_sid = 1
    'sessionName' => 'session',
    //'saveHandler'=> 'redis',
    'savePath' => 'tcp://localhost:6379?prefix=session::',
    'timeout' => 3600,
    ),


    В Yii::app()->session['username'] лежит NULL, а если закомментировать весь компонент session, всё работает, в сессию записывается логин.
    Пробовал играться с компонентом по разному, ставил 'saveHandler'=> 'files', убирал 'savePath', не-а. Нужно убирать компонент, чтобы работало.
    Это наша точка

Пожалуйста, авторизуйтесь, чтобы написать комментарий!