2012-03-12 24 views
1

我在我的网站中使用了以下软件包中的记住我功能:http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/。它工作正常。但我面对的是,已删除的用户可以访问帐户只是因为保持登入问题Zend框架记住我 - 正在运行的问题

的场景如下:。设置让我登录后

  1. 用户登录
  2. 他离开系统关闭而不注销。
  3. 当天晚上他的帐户被删除。
  4. 他在第二天早上登录该网站。

正如他所设定签署期间,他得到他的会议,他可以发布一个故事,在他的帐户做什么都不知道的事实,他的帐户已经得到了前一天被删除。另外,我还记得14天。

任何想法如何解决这个问题?

感谢

+0

您只能检查你检查什么。当会话结束并且用户被删除并且持续登录过程启动以保持用户登录时,它需要验证用户是否仍然存在。 – hakre 2012-03-12 11:15:29

+0

真的取决于用户如何进行身份验证。您可以尝试访问您的数据库并手动删除其帐户。 – Tom 2012-03-12 11:16:46

+0

shirley该网站应该检查什么时候编辑或发布的用户这样做有权限?否则,我会建议删除保持登录选项,如果它给你这么多麻烦。或者,您可以检查会话信息,以确定该用户在第二天再次返回该网站时是否仍然存在。除此之外,我想不出一个强制执行的好方法。 – jammypeach 2012-03-12 11:18:28

回答

3

扩展会话的到期时间用户验证超过几个小时是一个坏主意,原因很多,不仅仅是因为你保留了被删除用户的会话。还有一个与您在数据库/会话存储中保持活动会话(使用session_id)相关的性能和安全问题。

persisted login with Zend_Session::rememberMe

在任何情况下,你应该重新验证每个页面加载用户帐户,以确保他的用户仍然存在并活跃:

我已经创建了一个重新验证功能,我在每个页面加载调用。该函数在用户可以执行任何操作之前从控制器的init()函数中调用。

public static function revalidate() { 
     $userData = self::getIdentity(); 

     $modelUsers = new \Model_Users(); 
     $user = $modelUsers->fetchWithEmail($userData['email']); 

     if ($user instanceof \Model_User) { 
      if ($user->getRoleType() == 'ACCOUNT') { 
       return $user; 
      } 
     } 
     return false; 
    } 
2

正如他所设定保持登录状态,他得到他的会议,他可以发布一个故事,在他的帐户做什么都没有知道的事实,他的账户已经得到了前一天被删除。

当您删除用户时,您也必须删除所有用户的会话。

+0

谢谢各位朋友.. !! – Janaki 2012-04-23 08:29:10

0

这正是为什么您需要为每个应用程序/页面设置会话超时。

使用ini_set(),在会话续航时间

ini_set("session.cookie_lifetime","1800"); //half an hour 

然后检查是否会话存活在像

if (!empty(session_id())) { 
    header("Location: index.php"); //GO to home page 
    exit; 
} 
+0

谢谢大家的宝贵意见。 – Janaki 2012-03-12 11:41:04

1

在数据库中的会话表的每一个安全页面,使用一种外国使用ON DELETE CASCADE的USERS表的关键字。或者,您可以在获取会话时在用户表上执行JOIN。

0

当用户离开他的电脑并在第二天回到您的网站时,他的Session已经过期。在这一点上,如果你允许他访问你的网站,那是因为他选择了记住,你通过在计算机上设置cookie来做到这一点。

当您基于cookie验证用户时,您需要根据数据库检查cookie值。 不要只检查是否存在Cookie

这将解决您的问题。此外,它会插入一个主要的安全漏洞,恶意的人可以简单地在他的计算机上手动创建cookie并使用它们来验证您的网站。

0

您只能检查您检查的内容。当下会话结束和 用户删除和持久登录程序踢在 保持用户登录时,需要验证仍然存在用户。 - hakre

为hakre说,我想你一定每次他试图时间更改设置或做一些像发送新的岗位或发表新评论等,让我们尝试