ФорумПрограммированиеPHP для идиотов → sessions, что вам от них нужно?

sessions, что вам от них нужно?

  • artoodetoo

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

    Spritz 24 мая 2010 г. 11:25, спустя 51 минуту 23 секунды

    Мы должны быть благодарны контакту, за демонстрацию "так не надо делать" :)
    Поправь меня, если я ошибаюсь: в CI "flash" умирает на сделующей странице без вариантов. А идея RoR flash messages в том, чтобы значения жили до первого использования (в пределах сессии), псколько бы промежуточных страниц не было.
    ιιlllιlllι унц-унц
  • Абырвалг

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

    Spritz 24 мая 2010 г. 11:37, спустя 12 минут 5 секунд

    похоже на то. Дуд как раз и пытался донести до меня это своим постом. А вот ты как думаешь: как правильнее? Или нужно обеспечить возможность и так и так?
  • artoodetoo

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

    Spritz 24 мая 2010 г. 13:00, спустя 1 час 23 минуты 47 секунд

    IMHO: библиотеки должны расти только для того, чтобы прикладной код уменьшался. Не вижу смысла в варианте "только до следующей страницы"
    ιιlllιlllι унц-унц
  • phpdude

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

    Spritz 24 мая 2010 г. 13:03, спустя 2 минуты 52 секунды


    IMHO: библиотеки должны расти только для того, чтобы прикладной код уменьшался. Не вижу смысла в варианте "только до следующей страницы"

    поэтому я и долбился в его мозг как в стену, а рубовские - нормальная идея, хорошая даже я бы сказал, они убивает рутину из серии

    function addMessage($text, $type="msg")
    {
    $_SESSION['MESSAGES'][] = array($text, $type);
    }

    function messages()
    {
    if(!$_SESSION['MESSAGES'])
    {
    return;
    }

    $html = '<div class="messages">';
    foreach($_SESSION['MESSAGES'] as $msg)
    {
    $html .= '<div class="msg_'.$msg[1].'">'.$msg[0].'</div>';
    }
    $html .= "</div>";

    unset($_SESSION['MESSAGES']);

    return $html;
    }
    Сапожник без сапог
  • kostyl

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

    Spritz 24 мая 2010 г. 13:36, спустя 32 минуты 51 секунду

    ааа, я понял. Когда то давно у меня была такая фигня:
    class RequestHistory {
    /**
    * @static
    * @var array
    */
    private static $_ReqestStack = array();
    /**
    * @static
    * @var int
    */
    private static $_MaxSize = 10;
    /**
    * @static
    * @param string $RequestString
    */
    public static function SetRequestString($RequestString)
    {
    self::$_ReqestStack = Session::Get('request_history');
    if(NULL === self::$_ReqestStack) {
    self::$_ReqestStack = array();
    }
    array_unshift(self::$_ReqestStack, $RequestString);
    if (count(self::$_ReqestStack) > self::$_MaxSize) {
    array_pop(self::$_ReqestStack);
    }
    Session::Set('request_history', self::$_ReqestStack);
    if(Session::Get('curr_request') !== $RequestString) {
    Session::Set('prev_unic_request', Session::Get('curr_request'));
    }
    Session::Set('curr_request', $RequestString);
    }
    /**
    * @static
    * @return string
    */
    public static function GetPrevUnicRequestString()
    {
    return Session::Get('prev_unic_request');
    }
    }
    Спустя 105 сек.
    ну почти то же
  • Абырвалг

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

    Spritz 14 июня 2010 г. 11:59, спустя 20 дней 22 часа 22 минуты

    прототип, еще не работает. Ругайте, критикуйте код.
  • Абырвалг

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

    Spritz 14 июня 2010 г. 14:24, спустя 2 часа 24 минуты 59 секунд

    блиа, ну посмотрите же кто-нибудь
  • kostyl

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

    Spritz 14 июня 2010 г. 14:47, спустя 23 минуты 8 секунд

    посмотрел, ну ничё так, без комментв долго рассматривать надо, а вообще так, обычные сессии…
  • Абырвалг

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

    Spritz 14 июня 2010 г. 15:03, спустя 16 минут 3 секунды

    планируется что-то типа такого:

    $options = array(
    'serializer' => 'default', // можно экземпляры классов тулить
    'storage' => 'file'
    // … всякие настройки типа времени жизни и тд
    );

    $session = new BL_Session($options); // и это сохраняем внутри App-класса


    # Потом в модуле:
    // …
    public function __construct(BL_Application $app)
    {
    $this->session = $app->session('myNamespace');
    }

    public function process()
    {
    $this->session['foo'] = 'bar';
    $fructe = $this->session->get('fructe', 'apple');

    $ns2 = $this->session->ns('anotherNS'); // взяли другой неймспейс
    $ns2->setFlash($this->tr->tr('Данные успешно сохранены')); // это то сообщение читается один раз, потом удаляется

    $this->session->addFlash('сообщение 1'); // тоже самое, что и выше, просто иногда нужно добавить несколько таких сообщений
    $this->session->addFlash('сообщение 2');
    }
  • kostyl

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

    Spritz 14 июня 2010 г. 15:17, спустя 13 минут 54 секунды

    Абырвалг, немного не пойму, что у тебя делает неймспейс?
  • Абырвалг

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

    Spritz 14 июня 2010 г. 15:30, спустя 13 минут 16 секунд

    ну у меня все в неймспейсах происходит.

    $session->ns('myNS'); // типа как мы отделили себе $_SESSION['myNS'] и дальше работаем только с ним, никуда не лезем
  • kostyl

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

    Spritz 14 июня 2010 г. 15:39, спустя 8 минут 24 секунды

    Абырвалг, ааа понятно
  • Абырвалг

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

    Spritz 15 июня 2010 г. 12:11, спустя 20 часов 32 минуты 25 секунд

    Так-с, у сессий зависимости от Request и Response (инстанции этих классов отправляются в конструктор).

    	protected function generateSession()
    {
    $key = $this->options['name'];

    $this->id ||
    $this->id = $this->request->cookies($key) ||
    $this->id = $this->request->request($key) ||
    $this->id = call_user_func($this->options['randomizer']);

    $o = $this->options['cookies'];
    $this->response->setCookie($key, $this->id, $o['expire'], $o['path'], $o['domain'], $o['secure'], $o['httpOnly']);
    }

    прикольный кусок получился)
  • master

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

    Spritz 15 июня 2010 г. 12:15, спустя 3 минуты 26 секунд

    Буду делать обертку над сессиями. Какие плюшки там нужны? Ну типа неймспейсы, флеш-сообщения…

    накидайте интерфейсов))


    как-то так

    interface Session {
     function getValue($name);
     function setValue($name, $value);
     function deleteValue($name);
     function free();
    }


    Сами сессии - это примерно как БД, классы приложений работают с хранилищем не напрямую, а через класс-посредник. В случае с сессиями этот класс управления данными пользователя.
    не всё полезно, что в swap полезло
  • Абырвалг

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

    Spritz 17 июня 2010 г. 11:44, спустя 1 день 23 часа 29 минут

    1) что такое destroy в сессиях?

    Я так понимаю, что мы:
    удаляем все данные, сохраненные для этого SID с диска/из базы
    очищаем $_SESSION
    отправляем протухшую куку


    2) А чем отличается ручной вызов session destroy от автоматического (gc)?

    3) Как отслеживать lifetime?
    a) при каждом обращении к сессии обновляем колонку последнего обращения. Но у меня неймспейсы, на каждый неймспейс свой файл… Фигня получается
    b) создать какой-то meta-файл, в нем и обновлять дату последнего обращения

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