Форум → Программирование → PHP для идиотов → sessions, что вам от них нужно?
sessions, что вам от них нужно?
Страницы: ← Предыдущая страница • Следующая страница →
-
24 мая 2010 г. 0:25, спустя 51 минуту 23 секунды
Мы должны быть благодарны контакту, за демонстрацию "так не надо делать" :)
Поправь меня, если я ошибаюсь: в CI "flash" умирает на сделующей странице без вариантов. А идея RoR flash messages в том, чтобы значения жили до первого использования (в пределах сессии), псколько бы промежуточных страниц не было.ιιlllιlllι унц-унц -
24 мая 2010 г. 0:37, спустя 12 минут 5 секунд
похоже на то. Дуд как раз и пытался донести до меня это своим постом. А вот ты как думаешь: как правильнее? Или нужно обеспечить возможность и так и так? -
24 мая 2010 г. 2:00, спустя 1 час 23 минуты 47 секунд
IMHO: библиотеки должны расти только для того, чтобы прикладной код уменьшался. Не вижу смысла в варианте "только до следующей страницы"ιιlllιlllι унц-унц -
24 мая 2010 г. 2: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;
}Сапожник без сапог -
24 мая 2010 г. 2: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 сек.ну почти то же -
14 июня 2010 г. 0:59, спустя 20 дней 22 часа 22 минуты
прототип, еще не работает. Ругайте, критикуйте код. -
-
14 июня 2010 г. 3:47, спустя 23 минуты 8 секунд
посмотрел, ну ничё так, без комментв долго рассматривать надо, а вообще так, обычные сессии… -
14 июня 2010 г. 4: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');
} -
14 июня 2010 г. 4:17, спустя 13 минут 54 секунды
Абырвалг, немного не пойму, что у тебя делает неймспейс? -
14 июня 2010 г. 4:30, спустя 13 минут 16 секунд
ну у меня все в неймспейсах происходит.$session->ns('myNS'); // типа как мы отделили себе $_SESSION['myNS'] и дальше работаем только с ним, никуда не лезем
-
-
15 июня 2010 г. 1: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']);
}
прикольный кусок получился) -
15 июня 2010 г. 1:15, спустя 3 минуты 26 секунд
Буду делать обертку над сессиями. Какие плюшки там нужны? Ну типа неймспейсы, флеш-сообщения…
накидайте интерфейсов))
как-то такinterface Session {
function getValue($name);
function setValue($name, $value);
function deleteValue($name);
function free();
}
Сами сессии - это примерно как БД, классы приложений работают с хранилищем не напрямую, а через класс-посредник. В случае с сессиями этот класс управления данными пользователя.не всё полезно, что в swap полезло -
17 июня 2010 г. 0:44, спустя 1 день 23 часа 29 минут
1) что такое destroy в сессиях?
Я так понимаю, что мы:
удаляем все данные, сохраненные для этого SID с диска/из базы
очищаем $_SESSION
отправляем протухшую куку
2) А чем отличается ручной вызов session destroy от автоматического (gc)?
3) Как отслеживать lifetime?
a) при каждом обращении к сессии обновляем колонку последнего обращения. Но у меня неймспейсы, на каждый неймспейс свой файл… Фигня получается
b) создать какой-то meta-файл, в нем и обновлять дату последнего обращения
Страницы: ← Предыдущая страница • Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!