Я что, зря выдумывал такую схему что ли? Ахаха, вот уж что правда, век живи, век учись. А я как обычно узнаю о всех новинках только тогда, когда это уже не новинки. И да ладно бы, если бы просто не новинки, так это уже устаревшим считается, когда я об этом узнаю. Что ж, спасибо за наводку так или иначе ;)
По крайней мере, если речь идет о безопасности, то просто сунуть туда то, что "не жалко". Например, тот же логин пользователя, или статус напоминания - показано уже, или еще нет.
xmoonlight: Нет, я на самом деле думаю, что сессии - это хорошая практика, если их грамотно использовать и не злоупотреблять этим.
Я вот, например, недавно сидел, ломал голову, как сделать, своего рода, оповещение? Такой выплывающий сверху блок в пастельном красном, оповещающий пользователя о том, что он что-то забыл/упустил. Так вот, думал я, думал, как сделать так, чтобы пользователю это сообщение не надоедало (не выплывало при каждом открытии новой страницы), но и не забывал он о нем. Так вот, как я считаю, лучшим решением тут будет использовать сессии. Один раз показал, установил переменную сессии - и все, и забыл. Больше пользователь это назойливое сообщение не увидит. Перезашел в браузер - снова увидил.
Куда лучше, чем показывать при каждом входе в аккаунт(!) (слишком редко) или чем при каждом открытии новой страницы (слишком часто).
Короче говоря, если использовать сессии грамотно, то от них будет толк, я считаю. Немаловажно ими не злоупотреблять.
А вопрос по поводу того, использовать их, чтобы отслеживать, авторизировался пользователь, или нет, для меня до сих пор остается открытый.
Дмитрий Энтелис: 1 запрос в базу? То есть вы хотите сказать, что быстрее при каждой загрузке страницы брать из базы имя пользователя, статус его бана, его права, статус подтвержденности аккаунта, чем использовать такое?
<?php
if (isset($_SESSION['username'])) {
// то берем из сесси
} else {
// то подключаемся к бд, берем оттуда, и потом уже все равно пилим в сессию, чтобы в следующий раз из сессии брало, а не в базу лезло. Пусть лезет в базу, только когда сессии нет.
}
?>
По-моему мой вариант правильнее, что ли. Только вот что касается авторизации пользователя, сюда уже да, лучше сессии не сунуть, пусть только на куках держится. Хотя, это тоже спорный вопрос. Насчет безопасности использования сессий, однако, тут еще холивары не устраивались.
xmoonlight: не сочтите за наглость, но не могли бы вы в коде с комментариями объяснить? Хотя бы какую-то часть. Я не понял вот это: "обновили (перевыписали) токен на нужный ID сессии и сервер Вам отдаст переменные из серверной сессии (из хранилища сессий)." Как я узнаю, какой нужный ID сессии? Немного не догоняю.
xmoonlight: Вы меня не так поняли, наверно. Сейчас попробую пояснить.
Вот есть у меня кука с моими данными, ей осталось жить, например, 14 дней, потому что пользователь только что вошел (и в момент входа сгенерировались еще и переменные сессии). Так вот. Пришло время отобразить имя и фамилию пользователя в шапке сайта, я лезу за переменными, хранящимися в сессии, все норм, отобразилось. А теперь пользователь закрыл браузер (сессия удалилась), но не вышел из аккаунта. Теперь снова вошел в браузер, пришли время отобразить его имя и фамилию, НО, упс, нужных данных нет, потому что они были стерты. Вывод, их надо генерировать только тогда, когда их нет.
Получается, что каждый раз нужно просто выполнять проверку if (isset($_SESSION["firstName"]) && isset($_SESSION["lastName"])) {}?
В принципе, ресурсов потратится меньше, чем если к БД обращаться. Да и по сравнению с обращанием к БД, должно быстрее выйти, имхо.
Только осталось непонятным вот это: "Для полного счастья можно генерить новую куку при каждой авторизации.".
У меня эти "величины" постоянны для каждого пользователя. Сколько бы раз и с какого места и устройства я бы не заходил в свой аккаунт, эта кука у меня всегда будет выглядеть как шифр.пароля.из.бд-юзер.айди.
Спасибо большое за ответ. Действительно, что-то я забыл совсем про сессии.
Но ведь при закрытии браузера сессия накроется, насколько мне известно. А мне она нужна ровно настолько, насколько зашел пользователь, например, на 2 недели. Как мне тогда перезугружать данные сессии ТОЛЬКО тогда, когда пользователь заново открыл браузер, чтобы все равно не выполнять заполнении данных сессии каждый раз при загрузке страницы?
Дмитрий Энтелис: Я не думаю, что они медленны настолько, что я успею заварить чай, пока они будут подгружаться ;) А за микросекундами я не гонюсь. Имхо, если вам делает погоду несолько микро-(пусть мили-)секунд, то у меня для Вас плохие новости :)
На крайняк - задумайся о способе соединения с юзверем именно в тот момент, когда ты его банишь. Чтобы не оказалось такого, что он уже вошел на сайт (и перезаходить не планирует), и твой бан летит просто "мимо".
Но как же ситуация, когда пользователь уже на сайте, а вы его баните в БД? Он может решить перезайти на сайт еще только через 2 недели, а к этому моменту уже и срок бана закончится может ;)
Но, ведь согласитесь, в конечном итоге у меня все так или иначе сведется к вызову определенной функции, которая, в свою очередь, будет вызывать другие функции.
Я что, зря выдумывал такую схему что ли? Ахаха, вот уж что правда, век живи, век учись. А я как обычно узнаю о всех новинках только тогда, когда это уже не новинки. И да ладно бы, если бы просто не новинки, так это уже устаревшим считается, когда я об этом узнаю. Что ж, спасибо за наводку так или иначе ;)