Перейти к контенту
  • 0

СЕССИЯ: Удаление сессии после (X) неактивности...


never-never

Вопрос

Работая с 2.0.4, заметил один нюанс касательно обработки сессии... а именно - после определенной неактивности на форуме - после этого времени, заходя вновь на форум - сессия пользователя удаляется и срабатывает функция create_guest_session() для повторной авторизации... Но в версии 1.3.1 сессия хранится и не удаляется до тех пор, пока хрянятся cookies, независимо от неактивности на форуме... прежняя сесся не удаляется а лишь обновляется...

 

Как более корректно подправить в 1.3.1 чтобы сессия удалялась после (X) неактивности на форуме... как это делается в 2.x.x

 

Заметил такой нюанс, что параметр $ibforums->vars['session_expiration'] вообще не задействован в 2.x.x....

 

Функция create_guest_session()

  $ibforums->vars['session_expiration'] = $ibforums->vars['session_expiration'] ? (time() - $ibforums->vars['session_expiration']) : (time() - 3600);
 
 $DB->simple_construct( array( 'delete' => 'sessions', 'where'  => "ip_address='".$this->ip_address."'".$extra ) );

 

 

Функция create_member_session()

$ibforums->vars['session_expiration'] = $ibforums->vars['session_expiration'] ? (time() - $ibforums->vars['session_expiration']) : (time() - 3600);
	 
	 $DB->simple_construct( array( 'delete' => 'sessions', 'where' => "member_id=".$this->member['id'] ) );

 

В версии 1.3.1

 

Функция create_member_session()

 	 $ibforums->vars['session_expiration'] = $ibforums->vars['session_expiration'] ? (time() - $ibforums->vars['session_expiration']) : (time() - 3600);
	 
	 $DB->query("DELETE FROM ibf_sessions WHERE running_time < ".$ibforums->vars['session_expiration']." or member_id='".$this->member['id']."'");

 

Функция create_guest_session()

  $ibforums->vars['session_expiration'] = $ibforums->vars['session_expiration'] ? (time() - $ibforums->vars['session_expiration']) : (time() - 3600);
 
 $DB->query( "DELETE FROM ibf_sessions WHERE running_time < ".$ibforums->vars['session_expiration']." or ip_address='".$this->ip_address."'".$extra);

Ссылка на комментарий
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0
Но в версии 1.3.1 сессия хранится и не удаляется до тех пор, пока хрянятся cookies, независимо от неактивности на форуме... прежняя сесся не удаляется а лишь обновляется...

Неправда ваша.

Смотрите. Форум 1.х, functions.php:

 

       	 //---------------------------------
      	 // Remove the defunct sessions
      	 //---------------------------------
      	 
 $INFO['session_expiration'] = $INFO['session_expiration'] ? (time() - $INFO['session_expiration']) : (time() - 3600);
 
 $DB->query("DELETE FROM ibf_sessions WHERE running_time < {$INFO['session_expiration']}");

               $DB->query("DELETE FROM ibf_sessions WHERE member_id='".$this->member['id']."'");
....

 

Долго хранить сессии не совсем безопасно и умно.[1129465308:1129465401]Мы кстати одинаковые с вами запросы привели.

Сессии удаляются в любом случае. Правда, если кто-то есть на форуме. Но это не совсем важно в данном случае.

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Долго хранить сессии не совсем безопасно и умно.

Мы кстати одинаковые с вами запросы привели.

 

Да, все верно... я не верно обозначил трактовку вопроса... сама суть в ином...

 

Изучал я логику процесса авторизации в класссе class session... и мне не совсем ясен НЮАНС с cookies... а именно - да, действительно сессия, где running_time < {$INFO['session_expiration']} - удаляется... но не в этом дело...

Дело в том, что независмо от того - есть ли сессия в базе данных таблицы sessions или нет ее, даже если таблица sessions абсолютно пуста... НО, если в браузере есть сохраненные cookies ("member_id" + "pass_hash") - пользователь автоматически авторизируется на форуме!!! без залогирования!!! и в базе создается сессия для него... Вот сей нюанс меня немного настораживает...

 

Все дело в том, что я както залез в свой ноутбук, и обнаружил там прежне давным давно проинсталенный локально форум 1.3... открыл его и т.к. cookies сохранились в браузере - произошла автоматическая авотризация... хотя прошло месяца 3 наверно... а cookies в функции function my_setcookie() сохраняются на год!

$expires = time() + 60*60*24*365;

 

Вот данный факт в 1,3 меня не очень радует... хотя в версии 2,0 после определенной неактивности на форуме - автоматическая авторизация через cookies - не срабатывает... сравнивал клсасс class session 1,3 и 2,x -- координальных отличий нет... но в 2,0 фишка с cookies после длительной неактивности - не срабатывает...

 

А нужно мне следующее... лаконичная хронолгия...

- Пользоваетль прошел регистрацию... создал аккаунт...

- Залогинился на форуме...

Далее мне нужно что-бы после определенно-заданного периода неактивности - пользователь, вернувшись на форум - не смог автоматически авторизироваться на форуме через cookies!

30 минут к примеру прошло... пользователь был не активен... при возврате к работе с форумом - пользователь уже автоматом отправлялся в раздел act=Login

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Все дело в том, что я както залез в свой ноутбук, и обнаружил там прежне давным давно проинсталенный локально форум 1.3... открыл его и т.к. cookies сохранились в браузере - произошла автоматическая авотризация... хотя прошло месяца 3 наверно... а cookies в функции function my_setcookie() сохраняются на год!

ну логично! что ж мне каждый раз при редиректе вводить пароль???

 

сохраняются на год!

ну если изменить цифирь, то всё будет для вас в норме ?[1129490354:1129490478]

и обнаружил там прежне давным давно проинсталенный локально форум 1.3... открыл его и т.к. cookies сохранились в браузере - произошла автоматическая авотризация.

только если ваш новый пароль совпадает с прощлым, потому как ид той сессии уже давно не дествует.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Но почему тогда в версии 2,x при непродолжительной неактивности на форуме - нужно воновь авторизироваться?

 

Там такие же настройки для cookies $expires = time() + 60*60*24*365;

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Но почему тогда в версии 2,x при непродолжительной неактивности на форуме - нужно воновь авторизироваться?

я может не въезжаю, но я не помню, когда я последний раз авторизовался например здесь, хотя окно частенько сутками висит открытым?

если вы про сессию - то да, она по идее автоматом генерится новая... юзер этого и не замечает :D

раз пошла такая пьянка - почему бы вообще не ставить кук expires? тогда при выходе с сайта он будет убиваться да и всё...

Ссылка на комментарий
Поделиться на других сайтах

  • 0
раз пошла такая пьянка - почему бы вообще не ставить кук expires? тогда при выходе с сайта он будет убиваться да и всё...

 

Хорошая идея!

Сделать некю корректировку с добавлением дополнительно $cookie['expires']

 

Просто раз осуществляется автоматическое залогирование и создание сессии на форуме через сохраненные cookies... то если к примеру некто ЗЛОЙ будет иметь ХЕШ юзера (не нужно углубляться в вопрос каким образом)... то ему ничего не стоит зайти на форум подправив cookies...

Ссылка на комментарий
Поделиться на других сайтах

  • 0

never-never, всё так, но не кажется ли вам, что применительно к форуму (читай - открытой, всеобщей, площадке общения) вопросы удобства (слово "юзабилити" в исконном смысле тут даже лучше подходит) все же важнее, чем столь экстремальные методы защиты этих самых пользователей?

ведь в конце концов кто мешает "не углубляясь в подробности каким образом" просто обманом узнать пароли самого пользователя, и тут уже никакие сессии не помогут...

---

в порядке оффтопа: предлагаю подумать о написании скрипта автоматической смены паролей у всех юзеров через случайный промежуток времени с оповещением по секретным каналам и только по предъявлению паспорта :D

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.