[英]How to restrict user to be logged only one time per session?
我正在使用Symfony 1.4应用程序,因此我需要防止用户多次登录到该应用程序,这意味着如果S / He已经登录,则只能打开一个新帐户就不能登录。浏览器。
我要避免同一用户使用同一台计算机或另一台计算机中的其他浏览器开始另一个会话。
您可以通过以下方式检查用户是否已登录:
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
以将会话存储在db中( 您可以关注此博客文章 ) 然后创建一个扩展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
更新为:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.