Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Почему в браузере обнуляется переменная сессии $_SESSION на следующий день?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! У себя на сайте сделал авторизацию пользователя. Все переменные сессии храню в базе данных MySQL. В частности в переменной $_SESSION['blnIsLogin'] хранится то, что пользователь прошёл проверку паролем. Заметил, что на следующий день на сайт приходится заново выполнять вход. Один день для хранения сессии слишком мало, т.к. пишу сайт для внутренней корпоративной локальной сети и сбрасывать авторизацию так часто нет никакой необходимости. В чем может быть причина? Браузер Mozilla последней версии. ОС: Windows 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2015, 15:07 |
|
||
|
Почему в браузере обнуляется переменная сессии $_SESSION на следующий день?
|
|||
|---|---|---|---|
|
#18+
Алексей Смирнов, сохранай информацию о факте успешной аутентификации в cookie. Для PHP должны быть готовые решения надо только поискать. Что касается сессии она и должна быть короткоживущей чтобы не тратить зря ресурсы сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2015, 15:23 |
|
||
|
Почему в браузере обнуляется переменная сессии $_SESSION на следующий день?
|
|||
|---|---|---|---|
|
#18+
bazileАлексей Смирнов, сохранай информацию о факте успешной аутентификации в cookie. Для PHP должны быть готовые решения надо только поискать. Что касается сессии она и должна быть короткоживущей чтобы не тратить зря ресурсы сервера. Сессия хранится или в cookie или в базе данных. Я выбрал - "в базе данных" для безопасности, т.к. в cookie будет достаточно прописать $_SESSION['blnIsLogin'] = True; (при достаточной сноровке) и всё, доступ в базу обеспечен даже без пароля. Для работы с сессиями использовал готовые функции PHP: 'data_session_open', 'data_session_close', 'data_session_read', 'data_session_write', 'data_session_destroy', 'data_session_clean'. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2015, 15:42 |
|
||
|
Почему в браузере обнуляется переменная сессии $_SESSION на следующий день?
|
|||
|---|---|---|---|
|
#18+
bazileсохранай информацию о факте успешной аутентификации в cookie.Очень плохой совет. Кука легко читается/правится. Со всеми вытекающими. bazileЧто касается сессии она и должна быть короткоживущей чтобы не тратить зря ресурсы сервера.Не понятно, как время жизни сессии соотносится с ресурсами сервера. Или имеется в виду файл сессии? Ну так он небольшой обычно, что при нынешних гигабайтах дискового пространства не то что не фатально, но даже и не очень то напряжно. Нужна сессия на конкретной странице - стартуете, не нужна - не стартуете. А так сессия хоть год может жить не прося каши... Алексей Смирновв cookie будет достаточно прописать $_SESSION['blnIsLogin'] = True; (при достаточной сноровке) и всё, доступ в базу обеспечен даже без пароля.Ничего себе... А примерчик такой "сноровки" есть? Алексей СмирновЗаметил, что на следующий день на сайт приходится заново выполнять вход. Один день для хранения сессии слишком мало, т.к. пишу сайт для внутренней корпоративной локальной сети и сбрасывать авторизацию так часто нет никакой необходимости. В чем может быть причина?Сложно сказать, слишком мало информации. Вообще, принцип примерно такой. Хранить сессию в базе, отдельным полем хранить время последнего старта сессии (или время окончания жизни сессии). Время жизни куки, идентифицирующей сессию, установить достаточно большим (дня два, например). В функциях поддержки при старте сессии проверять время и принимать решение о продолжении существующей или о закрытии устаревшей и старте новой сессии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2015, 17:24 |
|
||
|
Почему в браузере обнуляется переменная сессии $_SESSION на следующий день?
|
|||
|---|---|---|---|
|
#18+
Алексей СмирновСессия хранится или в cookie или в базе данных. Смешались в кучу кони, люди (с) :( В cookie часто хранится идентификатор сессии. Данные сессии хранятся на сервере: в памяти, на диске или БД. Алексей Смирновв cookie будет достаточно прописать $_SESSION['blnIsLogin'] = True; (при достаточной сноровке) и всё, доступ в базу обеспечен даже без пароля. Что-то я не припомню атак с прописыванием PHP кода в cookie. Это сработает разве что когда значение cookie пропускается через eval на сервере. Скорее всего ты имеешь в виду атаки через известный параметр сессии при включенных register_globals. В этой ситуации, при неосторожном кодировании, можно сделать запроса вида site.ru/?blnIsLogin=True&userName=admin и войти под любым пользователем. Или, если непоытный программист, будет создавать cookie activeUser=admin, тогда тоже будет лекго взломать сайт. Однако если значение аутентификационной cookie достаточно длинное, случайное и, возможно, зашифрованное, то подобрать его будет практически невозможно. В этой ситуации злоумышленник может конечно попытаться выполнить session-hajacking атаку, но от этого тоже можно защищаться. vkleКука легко читается/правится. Со всеми вытекающими. Легко читается - да. Легко правится - не обязательно. Попробуй например подобрать куки для sql.ru. Он использует af_remember, af_data и af_ext_opts для этого. Если это так легко, то тебе не составит труда написать сообщение от чужого имени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2015, 18:33 |
|
||
|
Почему в браузере обнуляется переменная сессии $_SESSION на следующий день?
|
|||
|---|---|---|---|
|
#18+
bazilevkleКука легко читается/правится. Со всеми вытекающими. Легко читается - да. Легко правится - не обязательно.Кто или что может мне помешать отправить куку произвольного содержания на сервер? Мой HTTP-клиент - что хочу - то и отправляю. Могу отправить и "пользователь авторизован", если, как предлагается выше, хранить этот признак в куке. Не? ;-) bazileПопробуй например подобрать куки для sql.ru. Он использует af_remember, af_data и af_ext_opts для этого. Если это так легко, то тебе не составит труда написать сообщение от чужого имени.Даже и не буду пытаться пробовать В том и фишка, что кука не должна хранить каких-то потенциально опасных или сравнительно легко подбираемых данных, таких какbazileинформацию о факте успешной аутентификации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2015, 18:52 |
|
||
|
Почему в браузере обнуляется переменная сессии $_SESSION на следующий день?
|
|||
|---|---|---|---|
|
#18+
[quot] В том и фишка, что кука не должна хранить каких-то потенциально опасных или сравнительно легко подбираемых данных, таких какbazileинформацию о факте успешной аутентификации Вы все всё правильно говорите. Это может быть я сам неправильно авторизацию сделал. Я храню признак того, что пользователь залогинился именно в переменной сессии $_SESSION['blnIsLogin']. Чтобы не хранить её на компьютере пользователя, храню в базе данных. Если можно как-то по-другому сделать. Предложите, буду признателен. А про жизнь сессии 1 день, я неправильно написал. Сегодня вообще понял, что сессия у меня живет до закрытия браузера. При следующем открытии снова спрашивает пароль к сайту. Это не нормально я считаю. А почему так получилось - не понимаю. У меня в браузере целая куча сайтов открываются безпароля бесконечно долго. Взять к примеру mail.ru, vk,com да и тот же sql.ru, я в них вхожу каждый день без пароля. Что я не правильно сделал со своим сайтом не пойму(. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2015, 20:33 |
|
||
|
Почему в браузере обнуляется переменная сессии $_SESSION на следующий день?
|
|||
|---|---|---|---|
|
#18+
Алексей СмирновЭто может быть я сам неправильно авторизацию сделал. Я храню признак того, что пользователь залогинился именно в переменной сессии $_SESSION['blnIsLogin'].Что храните факт авторизации в переменной сессии, а не на клиенте - это Вы правильно делаете. Алексей СмирновА про жизнь сессии 1 день, я неправильно написал. Сегодня вообще понял, что сессия у меня живет до закрытия браузера. При следующем открытии снова спрашивает пароль к сайту.Давайте смотреть как работает механизм сессии. Это понимание потребуется как раз для "ручной" реализации. Когда стартует сессия, то на клиенте устанавливается кука с идентификатором сессии, а на сервере создаётся файл (или запись в базе данных), который (или которая) однозначно определяются как раз этим идентификатором. Важно заметить, что PHP умеет самостоятельно определять полученный из куки идентификатор и стартовать для пользователя именно его сессию. Второй момент - PHP имеет параметр, определяющий время жизни сессии. По дефолту это параметр session.gc_maxlifetime, имеющий значение 1440 секунд. Это означает, что при неактивности пользователя (сессия не использовалась) по прошествии указанного времени на стороне сервера сессия будет удалена. Если вебсервер создаётся специально для одного единственного приложения и его настройки Вам подконтрольны, тогда вполне можно подкрутить этот параметр, но если уж всё вручную, то ну нафик... Теперь смотрим на сторону клиента. Кука имеет некоторое, вполне определённое время жизни или "до закрытия браузера" (например, смотрите в доке параметр expire). По прошествии оного времени кука просто перестаёт существовать и при следующем обращении на сервер идентификатор попросту не отсылается и, даже если старая (существующая) сессия ещё не "померла" на сервере, она не может стартовать. Вот два случая, когда данные сессии теряются - по инициативе сервера или по инициативе клиента. Есть еще убиение сессии по инициативе программиста, но его рассматривать не будем. :-) Далее, касаемо восхода Солнца поддержки сессии вручную. Вы реализуете хранение сессии в БД. Хорошо. В таблице сессий должны быть минимум три поля - идентификатор сессии (чтобы определить, за каким пользователем закреплена данная сессия), данные (там будет содержаться серилизованный массив), время последней активности пользователя. Как разруливать. Примерно таким образом... Когда поступает задача на старт сессии, смотрите в куках наличие идентификатора сессии. Далее варианты... - идентификатора нет (новая сессия) - генерите идентификатор, устанавливаете этот идентификатор в куку с достаточно большим временем жизни, делаете запись в БД с этим идентификатором и отметкой времени активности. - в куке идентификатор есть - тут опять возможны варианты -- проверяете наличие этого идентификатора в БД - опять варианты --- в БД идентификатора нет - старт новой сессии (можно с переустановкой куки) --- в БД идентификатор есть - проверяете актуальность сессии... варианты ---- сессия актуальна - обновляете соответствующую запись, установив новую отметку времени активности, читаете из БД данные и восстанавливаете массив... ---- сессия просрочена - старт новой сессии, см. выше Проверять или нет актуальность сессии, обновлять ли метку времени - это по усмотрению. Можно не проверять и не обновлять, если не хотите управлять временем жизни сессии на стороне сервера. Уффф... много получилось, да вроде бы, не слишком запутанно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2015, 21:26 |
|
||
|
Почему в браузере обнуляется переменная сессии $_SESSION на следующий день?
|
|||
|---|---|---|---|
|
#18+
vkle, спасибо большое за такой ответ. Я все понял, что вы написали. Сразу полез в php.ini смотреть про переменную session.gc_maxlifetime, да стоит 1440. И заодно нашёл ещё одну переменную session.cookie_lifetime = 0. Про неё пишут, что если она равна 0, то сессия закрывается сразу после закрытия окон браузера (как раз мой случай). Но пока ничего пробовать не стал (уже поздно). Как попробую, отпишусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 00:40 |
|
||
|
Почему в браузере обнуляется переменная сессии $_SESSION на следующий день?
|
|||
|---|---|---|---|
|
#18+
И тем не менее, все равно несколько часов - погоды не сделает. Это очень мало. Я бы хотел сохранять логин пользователя на месяц, а то и больше. Как в mail.ru например. Тут PHP - Запомнить сессию в куках на месяц описывается как раз то что надо, только там информация в cookie хранится, а не в БД и пока не понял механизм решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 09:20 |
|
||
|
Почему в браузере обнуляется переменная сессии $_SESSION на следующий день?
|
|||
|---|---|---|---|
|
#18+
Вот здесь php - Запись данных в сессию и время хранения сессии нашел как раз то, что нужно. Оказывается в куках надо хранить некий хэш, хранить тот же хэш в БД и при заходе пользователя на сайт сравнивать их. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 09:38 |
|
||
|
Почему в браузере обнуляется переменная сессии $_SESSION на следующий день?
|
|||
|---|---|---|---|
|
#18+
Алексей СмирновОказывается в куках надо хранить некий хэш, хранить тот же хэш в БД и при заходе пользователя на сайт сравнивать их.Ну да, об этом и писал. Можно и хеш - так часто делают. А в принципе, не имеет значения, каким образом получен идентификатор. В любом случае, он должен быть уникальным для каждого пользователя и не должен подбираться тупым перебором сполпинка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 10:38 |
|
||
|
Почему в браузере обнуляется переменная сессии $_SESSION на следующий день?
|
|||
|---|---|---|---|
|
#18+
vkle, из-за этого теперь придется SSL соединение настраивать и покупать сертификат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 12:04 |
|
||
|
Почему в браузере обнуляется переменная сессии $_SESSION на следующий день?
|
|||
|---|---|---|---|
|
#18+
Алексей Смирнов, не понимаю, как одно с другим связано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 13:05 |
|
||
|
Почему в браузере обнуляется переменная сессии $_SESSION на следующий день?
|
|||
|---|---|---|---|
|
#18+
vkleАлексей Смирнов, не понимаю, как одно с другим связано. При использовании Cookie этот ХЭШ (который хранится в браузере) придется серверу и обратно передавать в заголовке HTTP (он по-другому не передается). При использовании протокола HTTP (без SSL) высока вероятность перехвата этого ХЭША. Достаточно будет на компьютере злоумышленника в файле cookies.txt браузера (или cookies.sqllite для Мозиллы) записать в переменную этот ХЭШ и доступ в систему обеспечен. Чтобы обезопасить канал связи рекомендуют для больших проектов использовать SSL ( https://). А у меня большой корпоративный проект. Сейчас он написан на MS Office + MySQL, но я принял решение клиентов постепенно переписывать на PHP (это избавляет от необходимости на каждом ПК иметь Microsoft Office, который очень дорогой и с появлением новых версии все больше глючит при использовании VBA). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 13:44 |
|
||
|
Почему в браузере обнуляется переменная сессии $_SESSION на следующий день?
|
|||
|---|---|---|---|
|
#18+
Алексей СмирновПри использовании протокола HTTP (без SSL) высока вероятность перехвата этого ХЭША. Достаточно будет на компьютере злоумышленника в файле cookies.txt браузера (или cookies.sqllite для Мозиллы) записать в переменную этот ХЭШ и доступ в систему обеспечен. Чтобы обезопасить канал связи рекомендуют для больших проектов использовать SSL ( https://). А у меня большой корпоративный проект.Всё верно говорите. Для "большого корпоративного" стоимость сертификата вряд ли окажется непреподъёмной. Да, как вариант, можно использовать спмоподписной сертификат или бесплатный... Варианты без SSL уже рассматривали? Например, можете попытаться добавить дополнительно признак привязки сессий к IP-адресу компьютера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 14:08 |
|
||
|
Почему в браузере обнуляется переменная сессии $_SESSION на следующий день?
|
|||
|---|---|---|---|
|
#18+
vkleВсё верно говорите. Для "большого корпоративного" стоимость сертификата вряд ли окажется непреподъёмной. Да, как вариант, можно использовать спмоподписной сертификат или бесплатный... Варианты без SSL уже рассматривали? Например, можете попытаться добавить дополнительно признак привязки сессий к IP-адресу компьютера. Да дополнительные варианты рассматривал. Привязка к IP ненадежная ввиду того, что некоторые модули будут использоваться через Интернет. Да про SSL сегодня все прочитал. Нашёл там какой-то самый дешевый Comodo Positive SSL (180 руб/год) на первое время. Потом конечно можно и подороже купить. И нашёл материал по созданию самописного сертификата, но проще 200р. заплатить, чем ещё разбираться с этим. Спасибо за помощь и обсуждения!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 14:38 |
|
||
|
Почему в браузере обнуляется переменная сессии $_SESSION на следующий день?
|
|||
|---|---|---|---|
|
#18+
Алексей СмирновИ нашёл материал по созданию самописного сертификата, но проще 200р. заплатить, чем ещё разбираться с этим.Разбираться там буквально на четыре команды, которые можно копипастить из "шпаргалок". Но главная проблема не в этом. Самоподписной сертификат пользователям придётся акцептировать самостоятельно (браузер задаст вопрос о доверии к сертификату). В этом смысле проще заплатить немного денег, чем напрягать пользователей лишним запросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 16:06 |
|
||
|
|

start [/forum/topic.php?fid=23&tid=1462112]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 377ms |

| 0 / 0 |
