Я работаю над приложениями Symfony 1.4, и мне нужно, чтобы пользователь не мог войти в приложение более одного раза, я имею в виду, что если S / He уже зарегистрирован, он не сможет войти в систему, просто открыв новый браузер.
Я хочу избежать того же самого пользователя, который начинает другой сеанс с другого браузера на том же компьютере или в другом.
Единственное решение, о котором я думаю, это использовать сеанс в MySQL (или в вашей базе данных), а затем проверить, активен ли сеанс для данного пользователя, чтобы он мог войти в систему или нет.
Это будет непростая часть. Я сделал это один раз, но не могу найти исходный код. Поэтому я опишу, что вам нужно будет сделать.
sfPDOSessionStorage
для хранения сеанса в db ( вы можете следить за этим blogpost ) затем создайте пользовательское хранилище, которое расширяет sfPDOSessionStorage
чтобы иметь возможность добавлять больше полей в таблицу сеансов.
У вас будет новое поле (например, sess_user_id
) внутри ваших sess_user_id
, что-то вроде этого:
all: storage: class: myCustomPDOSessionStorage param: db_table: session database: propel db_id_col: sess_id db_data_col: sess_data db_time_col: sess_time db_user_id_col: sess_user_id
Вам необходимо будет обновить метод sessionRead
& sessionWrite
с вашего пользовательского хранилища сеансов до:
Вы можете проверить, зарегистрирован ли пользователь, позвонив:
sfContext::getInstance()->getUser()->isAuthenticated()
или внутри действия:
$this->getUser()->isAuthenticated()
Поэтому, я думаю, вы хотите иметь что-то вроде:
public function executeLogin($request) { if ($this->getUser()->isAuthenticated()) { // redirect or whatever // $this->redirect(...); } else { // login user properly } }