我正在使用 Symfony 1.4 应用程序,我需要防止用户能够多次登录应用程序,我的意思是如果他/她已经登录,它应该无法登录只打开一个新的浏览器。
- 用户在 Chrome 上登录。
- 打开 Firefox,尝试登录,然后无法登录,因为会话已在 Chrome 上处于活动状态
我想避免同一用户在同一台计算机或另一台计算机上使用不同的浏览器开始另一个会话。
我正在使用 Symfony 1.4 应用程序,我需要防止用户能够多次登录应用程序,我的意思是如果他/她已经登录,它应该无法登录只打开一个新的浏览器。
我想避免同一用户在同一台计算机或另一台计算机上使用不同的浏览器开始另一个会话。
您可以通过调用来检查用户是否已登录:
sfContext::getInstance()->getUser()->isAuthenticated()
或内部行动:
$this->getUser()->isAuthenticated()
所以我想你想要这样的东西:
public function executeLogin($request)
{
if ($this->getUser()->isAuthenticated()) {
// redirect or whatever
// $this->redirect(...);
} else {
// login user properly
}
}
我想到的唯一解决方案是在 MySQL(或您的数据库)中使用会话,然后检查给定用户的会话是否处于活动状态,以便它可以登录或不登录。
这不会是一件容易的事。我做过一次,但找不到源代码。所以我将描述你必须做什么。
sfPDOSessionStorage
以将会话存储在数据库中(您可以关注此博文)然后创建一个扩展的自定义存储,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
从您的自定义会话存储更新到: