artmeister

Отключение параллельной авторизации

Recommended Posts

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

Нашёл ещё похожую тему (мёртвая) на форуме битрикса и там предлагают в init.php вставить след. код (но у меня он не заработал либо руки кривые):

AddEventHandler("main", "OnBeforeUserLogin", "CheckUserIsAlreadyOnline");

function CheckUserIsAlreadyOnline(&$arFields)
{
  if(isset($arFields['LOGIN']) && strlen($arFields['LOGIN']) > 0)
  {
     $targetGroupsId = array(5); // Массив Id групп пользователей, для которых запретить одновременные "онлайны".
     $user = CUser::GetByLogin($arFields['LOGIN'])->Fetch();
     if(!$user) return;
     
     $userGroups = CUser::GetUserGroup($user['ID']);
     if(array_intersect($targetGroupsId, $userGroups) && !in_array(1, $userGroups)
        && CUser::IsOnline($user['ID']))
     {
        global $APPLICATION;
           $APPLICATION->throwException("Пользователь с данным логином уже авторизован.");
           return false;
     }
  }
}

 

Share this post


Link to post
Share on other sites

Реализовать такое можно, например записывая в базу hash сессии под которым был авторизирован пользователь и удаляя его если пользователь отключается.
При авторизации проверять на наличие этого hash, если он есть, посылать лесом.
маленький нюанс, данный hash желательно обнулять по истечении какого-нибудь срока или проверять совместно с временем последнего действия на сайте

Share this post


Link to post
Share on other sites
1 час назад, Switch74 сказал:

Реализовать такое можно, например записывая в базу hash сессии под которым был авторизирован пользователь и удаляя его если пользователь отключается.
При авторизации проверять на наличие этого hash, если он есть, посылать лесом.
маленький нюанс, данный hash желательно обнулять по истечении какого-нибудь срока или проверять совместно с временем последнего действия на сайте

Есть инструкция как такое можно реализовать?

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

  • Member Statistics

    46,335
    Total Members
    3,128
    Most Online
    Витольд Магикан
    Newest Member
    Витольд Магикан
    Joined
  • Recently Browsing   0 members

    No registered users viewing this page.