我正在使用Symfony 1.4应用程序,我需要阻止用户多次登录应用程序,我的意思是如果S / He已经登录,它应该无法登录打开一个新浏览器。
我想避免同一个用户在同一台计算机上或另一台计算机上使用不同的浏览器开始另一个会话。
答案 0 :(得分:1)
您可以通过以下方式检查用户是否已登录:
sfContext::getInstance()->getUser()->isAuthenticated()
或内部行动:
$this->getUser()->isAuthenticated()
所以我想你想要有类似的东西:
public function executeLogin($request)
{
if ($this->getUser()->isAuthenticated()) {
// redirect or whatever
// $this->redirect(...);
} else {
// login user properly
}
}
答案 1 :(得分:1)
我想到的唯一解决方案是在MySQL(或您的数据库)中使用会话,然后检查某个用户的会话是否处于活动状态,以便它可以登录。
这不是一件容易的事。我做了一次,但找不到源代码..所以我将描述你将要做的事情。
sfPDOSessionStorage
以在db(you can follow this blogpost)然后创建一个扩展sfPDOSessionStorage
的自定义存储,以便能够在会话表中添加更多字段。
您的sess_user_id
内会有一个新字段(例如factories.yml
),如下所示:
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
到: