2012-03-12 6 views
1

Я использовал функцию «запомнить меня на своем сайте», используя следующий пакет: http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/. Он работает нормально. Но я сталкиваюсь с проблемой, что удаленный пользователь может получить доступ к аккаунтам только из-за оставаться в системеZend framework Запомнить меня - рабочий вопрос

Сценарий выглядит следующим образом:..

  1. Логин пользователя после установки держать меня в системе
  2. Он оставит система отключается без выключения.
  3. Его учетная запись была удалена в тот вечер.
  4. Он берет сайт на следующий день утром.

Как только он оставил подписку, он получает свою сессию, и он может публиковать историю и делать что-либо в своем аккаунте, не зная, что его учетная запись удалена в предыдущий день. Кроме того, я запомнил 14 дней.

Любые идеи, как решить эту проблему?

Благодаря

+0

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

+0

Действительно зависит от того, как пользователь аутентифицируется. Вы можете попытаться получить доступ к своей базе данных и вручную удалить свою учетную запись. – Tom

+0

shirley сайт должен проверить, когда что-то отредактировано или опубликовано, что пользователь делает это имеет разрешение? в противном случае я предлагаю удалить опцию пребывания в системе, если она вам очень неприятна. в качестве альтернативы вы можете проверить информацию о сеансе, чтобы узнать, существует ли этот пользователь или нет, когда они вернутся на сайт на следующий день. кроме этого, я не могу придумать хороший способ обеспечить это. – jammypeach

ответ

3

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

См. persisted login with Zend_Session::rememberMe.

В любом случае, вы должны перепроверить учетную запись пользователя при каждой загрузке страницы, чтобы убедиться, что его пользователь по-прежнему существует и активно:

Я создал функцию перепроверить, которую я называю при каждой загрузке страницы. Функция вызывается из функции init() контроллера, прежде чем пользователь сможет что-либо сделать.

public static function revalidate() { 
     $userData = self::getIdentity(); 

     $modelUsers = new \Model_Users(); 
     $user = $modelUsers->fetchWithEmail($userData['email']); 

     if ($user instanceof \Model_User) { 
      if ($user->getRoleType() == 'ACCOUNT') { 
       return $user; 
      } 
     } 
     return false; 
    } 
2

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

При удалении пользователя вы также должны удалить все сеансы пользователя.

+0

спасибо друзьям .. !! – Janaki

0

Это точно почему вам нужно настроить сеанс тайм-аута для каждого приложения/страницы.

Использование ini_set(), на время сеанса жизни

ini_set("session.cookie_lifetime","1800"); //half an hour 

Затем проверьте, если сессия жива в каждой защищенной странице, как

if (!empty(session_id())) { 
    header("Location: index.php"); //GO to home page 
    exit; 
} 
+0

Благодарим вас за ценные данные. – Janaki

1

В вашей таблице сессий в базе данных, использовать иностранный ключ к таблице ПОЛЬЗОВАТЕЛЕЙ с ВКЛ. УДАЛИТЬ КАСКАД. Или вы можете сделать JOIN в таблице пользователя при получении сеанса.

0

Когда пользователь покидает свой компьютер и возвращается на ваш сайт на следующий день, его сессия длится долго. На данный момент, если вы разрешаете ему получать доступ к вашему сайту, это потому, что он решил запомнить, что вы делаете, установив файлы cookie на компьютер.

Когда вы аутентифицируете пользователя на основе файлов cookie, вы ДОЛЖНЫ проверить значения cookie в базе данных. Не просто проверьте наличие печенья.

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

0

Вы можете только проверить, что вы проверяете.В тот момент, когда сеанс завершен, и пользователь удалил, и процедура постоянной регистрации запускается для , когда пользователь вошел в систему, он должен проверить, что пользователь все еще существует. - hakre

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

 Смежные вопросы

  • Нет связанных вопросов^_^