Форум → Программирование → PHP для идиотов → Сессии (обобщая)
Сессии (обобщая)
Страницы: ← Следующая страница →
-
Сессии я уже использовал, но хочется написать себе один модуль по работе с сессиями, чтобы потом использовать только его. Наполеоновски наметил себе: не открывать сессии всем попало, делать проверку кук, при запрещенных куках передавать с помощью get, если гет - привязка сессии к ip и времени, экранировать содержимое переменных … в идеале хочется преодолеть дефолтное PHPSESSID чтоб работало конфиго-независимо. А найти свою потерянную сессию - было бы вообще фантастикой. Впечатляюсь рапидшарой. Немцы, ё!
Материал короче потянет на статью, но с моими познаниями процесс потянет на целый год …
Что еще, посоветуете что-нибудь из личного опыта? -
30 мая 2008 г. 18:27, спустя 8 минут 27 секунд
делать проверку кук, при запрещенных куках передавать с помощью get
Как вы собираетесь установить, включены ли куки при первом запуске сценария?если гет - привязка сессии к ip
А если куки включены, почему бы не делать привязку по IP? Куку подменить не сложнее, чем гет-параметр.преодолеть дефолтное PHPSESSID
session_name();экранировать содержимое переменных
В смысле? Пользователи не имеют прямого доступа к сессии, в ней будет только то, что вы в нее запишете. А проверять нужно значение всех переменных, а не только тех, которые будут записаны в сессию. -
30 мая 2008 г. 18:39, спустя 12 минут 17 секунд
> Как вы собираетесь установить, включены ли куки при первом запуске сценария?
Видимо вас смутило слово модуль. Под модулем я подразумевал не костяной набор кода, а скорее набор последовательностей которые использовать выборочно. Так на странице логина при ее загрузке ставится кука, при появлении postа уже включаются проверки.
> А если куки включены, почему бы не делать привязку по IP? Куку подменить не сложнее, чем гет-параметр.
Тоже поясню. Не во всех процессах нужна паранойя. Например если существует какая-то многошаговая подача, а у человека на модеме рвется связь (представьте, они не вымрут), удалять сессию чтоли? В каких-то более ответственных частях конечно использовать и IP, но ведь тоже существуют нюансы …
> session_name();
Да, спасибо, уже читал. Но я еще (образно) как слона в тумане ощупываю, общая картина никак не складывается. Плюс я тугодум. Короче много вопросов относительно сессий еще остается …
> экранировать содержимое переменных
Нет, я про экранирование слешами всяких кавычек. Я правда до конца не уверен что так нужно хранить В СЕССИЯХ, просто так видел. Информацию собираю. -
30 мая 2008 г. 19:26, спустя 47 минут 5 секунд
> А если куки включены, почему бы не делать привязку по IP? Куку подменить не сложнее, чем гет-параметр.
Тоже поясню. Не во всех процессах нужна паранойя. Например если существует какая-то многошаговая подача, а у человека на модеме рвется связь (представьте, они не вымрут), удалять сессию чтоли? В каких-то более ответственных частях конечно использовать и IP, но ведь тоже существуют нюансы …
А если у бедного пользователя отключены куки и рвется связь? Ему придется начинать все сначала. Я думаю, что привязку по IP нужно или использовать в любом случае, или не использовать вообще (имеются в виду разные методы передачи SID'a, разумеется, а не разные задачи).Нет, я про экранирование слешами всяких кавычек.
Экранирование нужно преимущественно только при работе с БД. И его нужно выполнять всегда, неважно, откуда пришли данные, из сессии или еще откуда.Я правда до конца не уверен что так нужно хранить В СЕССИЯХ, просто так видел.
В зависимости от задачи =) Банальный пример — корзина инет-магазина. В сессии, как правило, нужно и достаточно хранить ID товаров и совсем не нужно тягать в сессии описания, изображения и т. п. -
30 мая 2008 г. 19:51, спустя 24 минуты 27 секунд
> А если у бедного пользователя отключены куки и рвется связь? Ему придется начинать все сначала.
Пожалуйста разъясните. Мне казалось что GET (остатки в адресной строке и комбинация с встройкой имени сессии "в страницу") как раз от этого спасает, конечно если кука не успела испортиться. До сих пор мне казалось что шанс продолжить свою оборванную сессию всетаки есть …
P.S. Еще обращал внимание, серьезные процессы создают SESSIONBAK, только как его подобием манипулировать еще ума не приложу. А точнее, в копии даже смысла не вижу. Хотя … она видимо как раз для обрыва, при разрешенных куках. -
30 мая 2008 г. 20:15, спустя 23 минуты 59 секунд
Пожалуйста разъясните. Мне казалось что GET (остатки в адресной строке и комбинация с встройкой имени сессии "в страницу") как раз от этого спасает
Спасает, но вы же хотите сделать привязку по ип, если гетом передается =)
Да и если кукой передается, то сессия продолжиться. Может, вам нужно тут почитать? =)
http://phpfaq.ru/session — изучайте. -
30 мая 2008 г. 20:23, спустя 8 минут 16 секунд
Согласен. Сам себе противоречу. Видимо забыл добавить что IP при гетах обязателен в ответственных процессах типа авторизации.
Вот именно поэтому, собирание "всего этого" в единое просто угнетает … -
10 июня 2008 г. 11:51, спустя 10 дней 15 часов 28 минут
Подскажите, можно ли/как заставить session_start работать в функции? Хочется вызывать функцию, в которой уже будет необходимый функционал по проверке и тп. Если все упростить то:
function sessiya()
{
session_name('SESSION');
session_start();
}
В таком виде она работает, но приводит к неадекватному поведению сценария. -
10 июня 2008 г. 12:43, спустя 52 минуты 5 секунд
к какому поведению?
Подскажите, можно ли/как заставить session_start работать в функции? Хочется вызывать функцию, в которой уже будет необходимый функционал по проверке и тп. Если все упростить то:
function sessiya()
{
session_name('SESSION');
session_start();
}
В таком виде она работает, но приводит к неадекватному поведению сценария.все умрут, а я изумруд -
10 июня 2008 г. 12:58, спустя 15 минут 2 секунды
Вы не поверите, но при истользовании в элементарной конструкцииif (был пост)
{
проверка содержимого, определение ошибок
if (все ok)
{
function sessiya();
$_SESSION['lalala']='ляляля';
редирект
}
}
else
{
не пост
}
<form>
форма, отправить
</form>
Варианта 'пост' вообще не случается 8-\ заменяешь на session_start - случается. Стартуешь сессию функцией (даже как указал) - каждый раз работает как простой показ страницы, без отправки. -
-
10 июня 2008 г. 13:08, спустя 7 минут 13 секунд
if (isset($_POST['submit'])
{
был
}
else
{
небыл
}
т.е. по конкретной кнопке. -
10 июня 2008 г. 13:13, спустя 5 минут 29 секунд
так я понял
у тебя все на одной странице
кейс 1
первый раз смотришь страницу
- не пост
- заполняешь форму
- отправляешь
кейс 2
второй раз смотришь страницу
- пост
- сессия стартует
- тебя релдиректит
кейс 3
тебя отредиректило опять на туже страницу
- не пост
- сессия не стартует
- кейс 1 -
10 июня 2008 г. 13:22, спустя 9 минут 5 секунд
Да, именно так все и случается. Только при старте сессии внутри функции, варианта пост магическим образом не случается вообще никогда, даже когда он реально был. При использовании session_start все работает, а если она (даже одна) заключена в функцию - нет. А решения как объявить ее "глобальной" =) не знаю. -
10 июня 2008 г. 14:26, спустя 1 час 3 минуты 31 секунду
премию мне за проницательностьif (был пост){
echo $_SESSION['lalala'];
if (все ok) {
}
}
я тебе еще раз говорю что ты не увидешь свое "лалала" при таком кейсе!
тебе надо стартовать сессию раньше чем ты пытаешься из нее получить чтото
PS вот тебе еще пример для размышления http://mabp.kiev.ua/content/2007/06/21/mysql_session_manager/
Страницы: ← Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!