2014-11-30 4 views
0

У меня есть три папки на моем проекте, студентов, учителей, администраторов.несколько сеансов по применению Бейн совместно неумышленно

Каждый из них имеет страницу входа, которая запускает сеанс, когда он действителен, а затем перенаправляется на index.php. И каждый из них имеет logout.php, который разрушает сеансы, затем перенаправляет на login.php.

В чем моя проблема?

Если я авторизироваться на студентов, затем откройте учителей или администратора я буду быть авторизованы на эти услуги. И если я выйду в один из них, я выйду из системы во всех них.

Как я могу заставить эти сеансы работать «индивидуально»?

+1

Дайте сеансам имя с именем 'session_name()' и уничтожьте определенный сеанс. Итак session_name ('teachers') -> unset ($ _ SESSION ['teachers']) – davidxd33

+0

использует классы для создания ваших сеансов, а затем дает каждому имя. при выходе из системы, вместо того, чтобы уничтожить сеанс, отбросьте его на нуль и отмените его. для проверки, если вы вошли в систему, вы можете использовать экземпляр против сеанса, чтобы узнать, является ли это экземпляром вашего класса сеанса. и да, можно хранить экземпляры классов в сеансах, я делал это в течение многих лет. подробнее см. здесь https://github.com/r3wt/superuser/blob/master/libs/custom/funcs.php#L143 – r3wt

ответ

0

Вы можете назвать каждую сессию и уничтожить конкретные.

Используя session_name() и unset(), вы можете получить желаемый результат.

So session_name('teacher') зарегистрирует сеанс для учетной записи учителя.

Чтобы уничтожить эту конкретную сессию, используйте unset($_SESSION['teacher'])


Некоторые примеры

Некоторые файл инициализации или глобальный файл ..

session_name('teacher'); 
session_start(); 

В logout.php возможно передать печенье или строку запроса, чтобы определить, какой сеанс отменяется

unset($_SESSION['teacher']); 
+0

Большое вам спасибо! Я должен использовать его вот так? \t 'session_start();' ' \t session_name ('админ');' Кроме того, как я могу вводить данные на сессии? \t '$ _SESSION ['login'] = $ login' Приведенный выше код не работает с использованием session_name ('admin'); –

+0

Объявите имя перед началом сеанса. Вы можете нормально обрабатывать сеанс, используя $ _SESSION []. Вы можете попробовать сбросить $ _SESSION, чтобы просмотреть данные сеанса. – davidxd33

0

Несмотря на то, что с точки зрения безопасности выход из системы должен теоретически очищать все пользовательские данные с сеанса, вы можете избежать его, классифицируя свои модули.

Если у вас есть переменная сессии отображается что-то вроде этого ..

$_SESSION = array (
        'student' => array(..), 
        'teacher' => array(..), 
        'admin' => array(..), 
); 

Вы можете просто снята с охраны() один или более $ _SESSION [..], чтобы очистить конкретный модуль. Вы также можете определить, какая ссылка для выхода из системы была нажата, указав переменную $ _SERVER ['HTTP_REFERER']. Надеюсь, поможет.

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