Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Одмин

Проблема с окончанием сессии при входе с другого пользователя

Recommended Posts

Всем привет, друзья!

 

Ну, наверное, вкратце из заголовка уже стало понятно в чём трабл.

Объясню по-порядку... У меня есть 2 пользователя помимо моей администраторской учетки. Эти 2 пользователя - мои, т.е. принадлежат мне и от них пишу только я (мои мультиаккаунты). Естественно, об этом никто не догадывается. Ну да дело не в этом...

 

Дело в том, что в админке есть замечательный инструмент, называется "Вход". Он находится в профиле каждого пользователя и если нажать на эту кнопку, то админа логинет на форуме под этим пользователем. Тут же можно и писать любые посты от этого юзверя. Но вот незадача...

 

Открыт браузер Opera. Захожу в АЦ - Пользователь N - нажимаю "Вход" - пользователь залогинен - я от него пишу пост. Затем закрываю Оперу (полностью все вкладки и сам браузер). Открываю снова браузер Опера. Открываю вкладку с АЦ - захожу в АЦ - нахожу в списке пользователей другого своего пользователя - нажимаю "Вход" и другим пользователем автоматически залогиниваюсь на форуме. При этом в подвале форума видно, что новый мой юзверь залогинин и активен, а старого разлогинивает. И это видно в подвале. Вот в чем трабл...

 

Хотелось бы, что бы при каждом залогинивании из АЦ или просто залогинивании с форума не разлогинивало другого моего пользователя и он оставался активным в подвале форума!

 

В настройках безопасности в АЦ отключены проверки IP и браузера, поэтому я не понимаю, почему разлогинивает моих пользователей при заходе других моих пользователей...

 

Может есть возможность как-то внести правку в код, чтобы все мои пользователи всегда оставались активными в подвале при залогинивании других моих пользователей на форуме?

  • Upvote 1

Share this post


Link to post

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

 

Попробуйте авторизироваться из разных браузеров. Либо, прежде чем зайти под другим пользователем, удалите из cookies идентификатор сессии session_id и pass_hash, или все кукисы (в опере: F12 -> Настройка для сайта... -> Cookies).

  • Upvote 1

Share this post


Link to post

В классе сессий, методе convertGuestToMember, есть еще такой код:

/admin/sources/classes/session/publicSessions.php

 

	/* Delete old sessions */
	$this->_destroySessions( "ip_address='" . $this->_member->ip_address . "' AND id != '{$this->session_id}'" );

При авторизации пользователя он также может удалять другие сессии с этого IP адреса и он не привязан ни к одной настройке. Немного не логично если например пользователи будут висеть за nat-ом с одним IP на всех.

 

Собственно так оно и есть. Этот код при авторизации удаляет все остальные сессии имеющие этот же IP. Как вариант, его можно также прикрепить к настройке проверки IP адреса.

 

Заменить на (два раза):

 

	/* Delete old sessions */
	if( $this->settings['match_ipaddress'] )
	{
		$this->_destroySessions( "ip_address='" . $this->_member->ip_address . "' AND id != '{$this->session_id}'" );
	}

 

АЦ -> Системные настройки -> Настройки безопасности: Учитывать IP адрес пользователя при проверке сессии? - Нет

  • Upvote 3

Share this post


Link to post

@siv1987, спасибо большое, теперь работает!!! И я хочу сказать, что теперь функция проверки IP работает полноценно, не так как было заявлено в настройках в АЦ. И этот косяк до сих пор не исправили в тройке...

 

Но осталось несколько вопросов чисто для понимания ситуации...

 

. Правда, немного не логично если например пользователи будут висеть за nat-ом с одним ип на всех.

Вот тут поясните, почему?

 

И ещё вопрос... я так понимаю, при данном решении выше, теперь можно просто закрывать браузер, входить по новой, логиниться на форуме и пользователей с этим же IP разлогинивать на форуме не будет? Я правильно понял?

Share this post


Link to post

/* Delete old sessions */

В том файле два '/* Delete old sessions */' - я добавил решение в оба варианта. Правильно?

Share this post


Link to post

Да. Один когда пользователь авторизируется на форуме, второй когда выходит.

Share this post


Link to post

@siv1987, а позвольте ещё один вопрос по теме. А если зайдет 2 пользователя из сети с одним IP, допустим это одна контора, в которой все сотрудники сидят за разными компьютерами, подключенными к инету, но у каждого из этих сотрудников-юзеров сети один IP? И когда они начнут одновременно юзать форум, их будет разлогинивать или они будут юзать форум как и прежде?

Share this post


Link to post

Если не использовать данную правка их будут выбрасывать из учетной записи.

  • Upvote 1

Share this post


Link to post

круто!

 

спасибо за мануал, очень помогли :)

Share this post


Link to post

Я тут задам вопрос в продолжении темы.

 

- При закрытии браузера и сразу же его открытии авторизация пропадает, хотя при первой авторизации браузер спрашивал ( сохранять пароль или нет ).

 

- Браузеры разные, пк разные.

- кэш чищен.

 

 

Возникала у кого такая проблема и как была решена ?

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...