Skip to content

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

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

 

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

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

 

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

 

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

 

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

 

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

 

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

Featured Replies

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

 

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

В классе сессий, методе 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 адрес пользователя при проверке сессии? - Нет

  • Author

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

 

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

 

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

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

 

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

  • Author

/* Delete old sessions */

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

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

  • Author

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

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

  • 8 months later...

круто!

 

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

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

 

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

 

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

- кэш чищен.

 

 

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

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.