[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Авторизация
Igoreian
Всем привет!

Сижу над темой авторизации, и возник такой вопрос:

чтобы узнать, авторизован ли пользователь (который сейчас запросил страницу), нужно глянуть в его сессию, типа:

if (isset($_SESSION['isLogined']))
{
///
}

если не авторизован, выдать ему форму. А если пришел POST-запрос с логином и паролем - проверить их, если верные - стартануть сессию, заведя там флаг.

НО чтобы даже проверить, в самом начале, что в _SESSION есть флаг, нужно вызвать session_start. Получается, что session_start вызывается ВСЕГДА, хотя много где пишут, что стартовать для каждого посетителя сессию - это большая нарузка. Как тогда ее можно стартовать не для каждого?



Спустя 4 минуты, 35 секунд (19.04.2011 - 18:12) Zerstoren написал(а):
Я всегда стартую сессию для каждого юзера.
Честно - проблем с нагрузкой не испытываю.

Проблема в сессиях появляется тогда, когда всякие умники запихивают туда здоровый объем данных, т.к. сессии это всего лишь сериализованная строка.

Спустя 59 минут (19.04.2011 - 19:11) Nikitian написал(а):

if(isset($_REQUEST[session_name()])){
//Стартуем сессию для юзера
session_set_cookie_params(time()+3600,'/','.'.str_ireplace('www.','',$_SERVER['HTTP_HOST']),false,true);
session_start();
}

И сессия стартуется только если была запущенна когда-либо

Спустя 1 час, 10 минут, 18 секунд (19.04.2011 - 20:21) Igoreian написал(а):
Т.е. получается, что когда юзер ввел логин и пароль, их нужно проверить в самом начале, иначе не вызовится session_start?

Просто у меня сайт - это совокупность модулей, каждый занимается своим делом, есть модуль user, который в уголке рисует либо форму авторизации, либо кнопку выхода, и он же обрабатывает POST-запрос авторизации. Понятно, что до этого модуля отрабатывает куча других (другие модули, образующие каркас сайта, типа меню, голосовалки и т.п.), и пока до него доходит очередь - вывод данных уже произошел, стартовать сессию он не может. Видимо нужно сделать синглетон-модуль User, который дергать в самом начале, чтобы он проверил через POST пароль и логин.

Спустя 7 минут, 19 секунд (19.04.2011 - 20:29) Krevedko написал(а):
у меня сессия стартует в самом первом самом главном индексе. никогда не парился по этому поводу

Спустя 12 минут, 26 секунд (19.04.2011 - 20:41) inpost написал(а):
Igoreian
Сессия нужна не только для пользователей smile.gif Передача данных с одной страницы на другую порой тоже пользуюсь сессией, поэтому всегда стартовать стоит в начале.

Спустя 10 минут, 11 секунд (19.04.2011 - 20:51) Nikitian написал(а):
Igoreian
Используйте буферизацию вывода и стартуйте сессию там. где она необходима.

Спустя 34 минуты, 49 секунд (19.04.2011 - 21:26) Igoreian написал(а):
Буферизацию - через ob_start?

Спустя 39 минут, 33 секунды (19.04.2011 - 22:06) Nikitian написал(а):
Именно.

Спустя 9 часов, 42 минуты, 44 секунды (20.04.2011 - 07:48) Igorian написал(а):
Идея прикольная, спасибо) Я в принципе и так использую буфферизацию, следующим образом:

есть некий Application, в его Show вызывается "отрисовка" всех модулей, используя буфферизацию результат сохраняется в переменные, которые потом подставляются в шаблон вида:

$view['menu'] = $moduleMenu->Render();
$view['footer'] = $moduleFooter->Render();
....

и шаблон:
..
<div class="menu">
<?= view['menu'] ?>
</div>
...

Не работал старт сессии по другой причине: дурацкий BOM в кодировке.

Спустя 31 минута, 35 секунд (20.04.2011 - 08:20) kirik написал(а):
Цитата (inpost @ 19.04.2011 - 13:41)
Передача данных с одной страницы на другую

Это не совсем правильная архитектура приложения. Нужно этого избегать по возможности.

Спустя 9 минут, 48 секунд (20.04.2011 - 08:30) Igorian написал(а):
А как тогда сохранять данные? Через печенье?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.