2012-08-12 85 views
0

基本上我有一个具有基本会话功能的登录系统,并且它在浏览器关闭时超时。我一直在接受投诉,所以我希望能够点击记住勾号,并让他们的会话持续30天。实现“记住我”功能

+4

http://php.net/manual/en/features.cookies.php – j08691 2012-08-12 02:32:01

+0

设置cookie一拉@ j08691的链接(不是真的,不过,因为在大多数情况下, cookie由PHP生成,而不是由站点设置)。但是,如果用户关闭了浏览器并且浏览器设置为删除所有Cookie,那么在这种情况下您可以做的事情并不多。 – 2012-08-12 02:34:58

+0

可能的[PHP Loginsystem:Remember Me]重复(http://stackoverflow.com/questions/3128985/php-loginsystem-remember-me) – 2012-08-12 02:37:51

回答

-2

例如,在设置$_SESSION['user_id']的同时设置cookie。就像这样:

$token = hash('md5',$_SESSION['user_id'] . time() . 'salt'); 
setcookie('token', $token, time() + (3600 * 24 * 30)); 
setcookie('user_id', $_SESSION['user_id'], time() + (3600 * 24 * 30)); // Cookie expires in 30 days 

保存$token在DB中USER_ID列。

然后,设置$_SESSION['user_id']与cookie的用户保存,所以他们没有以正常的方式签署:

if (!isset($_SESSION['user_id']) { 

    if (isset($_COOKIE['user_id']) && isset($_COOKIE['token']) { 

     $saved_token = SELECT token FROM users table WHERE userID = $_COOKIE['user_id']; 
     if ($_COOKIE['token'] == $saved_token) { 
     $_SESSION['user_id'] = $_COOKIE['user_id']; 
     } else log out 
     } 
} else log out 
} 
} 

也许是明智的作品更好的安全性?

+1

只记得在用户注销时删除cookie – NewInTheBusiness 2012-08-12 02:35:22

+0

也许,* if * the服务器理解,信任和膨胀到会话。 – 2012-08-12 02:35:44

+3

所以我所要做的冒充你的网站上的用户是提交一个有效的用户ID的cookie? – 2012-08-12 02:37:58

2

如上所述,这可以通过cookie完成。有很多tutorials,但一个好方法是必要的安全。我仍然记得,在Orkut这个长期死去的社交网站上,你可以让用户运行一些脚本窃取他的cookies,并且即使用户已经注销,该帐户也是你的。

所以这里是最好的方法。

  • 创建用户一个cookie,hashing一些盐的用户ID,呼叫 它的用户令牌。

  • 在您的数据库中存储与其所属用户的令牌及其 到期日期。

  • 现在,当他的饼干用户访问,只检查哈希是否有数据库和日志的游客。

  • 当用户注销刚刚从数据库中删除该令牌。

More information

+0

嗯。可能(虽然实际的会话ID计算并不重要,除了它的复杂性和稀缺性)。这或多或少是一个会话标识符,所以我想知道当我们已经有一个内置的PHP时,为什么要创建一个并行会话标识符。 – 2012-08-12 03:05:39

+0

因为essions不是持久性cookie吗? – Shubham 2012-08-12 03:10:42

+0

因此,使用会话ID并将其保存在数据库表中。 – 2012-08-12 03:11:25