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
Share on other sites

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

 

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

  • Upvote 1

Share this post


Link to post
Share on other sites

В классе сессий, методе 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
Share on other sites

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

 

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

 

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

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

 

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

Share this post


Link to post
Share on other sites

/* Delete old sessions */

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

  • Upvote 1

Share this post


Link to post
Share on other sites

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

 

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

 

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

- кэш чищен.

 

 

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

Share this post


Link to post
Share on other sites

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...