我在哪里可以找到一个PHP / MySQL的执行查尔斯·米勒的“永久登录cookie”的解决方案?(

2019-08-18 01:00发布

我已经看到了一次又一次查尔斯·米勒的“ 永久登录cookie最佳实践 ”在这里推荐为实现在网站上“记住我”的功能(如果你真的需要这个功能,这是我做的)的绝对最佳途径。

不过,我已经冲刷网页,我找不到任何实际的PHP / MySQL的代码实现自己的解决方案,而且由于“安全”是关于使用“记住我”,强调约一个极大次,我怕码我自己从头开始,因为担心我会误解的东西或犯了一个错误,这将导致一个巨大的安全漏洞。

由于他的解决办法是近10岁,恰好是最upvoted答案的SO关于持久性登录饼干,当然必须有一些审核PHP / MySQL代码在那里,正确跟随他没有任何意外的安全漏洞的解决方案。 (我发现的最接近的事情是一个Drupal模块,但我不使用Drupal。)

有谁知道在哪里可以找到它?

Answer 1:

在计算器上阅读的问题后,我受到启发,帮助他写一个PHP / MySQL的执行查尔斯·米勒的“永久登录cookie最佳做法”在本教程中我将假定你已经有用户登录一个PHP系统。

CREATE TABLE user_sessions (
  user_id INT(11) UNSIGNED NOT NULL,
  session VARCHAR(39) NOT NULL,
  created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  PRIMARY KEY (user_id, session)
);

首先,我们需要更新的网站,当你登录到会话存储到cookie中。 此代码会与你当前登录系统。

if (/* Code that verifies credentials */) {
  // ... code to log user into session

  PersistentAuth::login($userId);
}

其次,我们要检查是否有新的用户到该网站有饼干凭据。 此代码会在你的代码的开头。 它检查,首先,我们已经登录我们的$ _SESSION? 如果没有,请尝试基于cookie的登录。

if (/* !loggedIn() */ && ($userId = PersistentAuth::cookieLogin())) {
  // ... use $userId to log user into session 
}

第三,根据查尔斯·米勒的文章中,我们不能让用户在下面的部分,如果他们是通过cookie的登录:

  • 更改用户的密码
  • 更改用户的电子邮件地址(特别是在使用基于电子邮件的密码恢复)
  • 任何访问用户的地址,付款信息或财务信息
  • 任何进行购买能力

码:

if (PersistentAuth::isCookieLogin()) {
  // User is logged in via cookie and don't have access to this 
  // section. We need to ask them for the password. Maybe send 
  // them to some login page?

  // TODO ask for password or send to a password page
}

为了让所有的代码,PersistentAuth类结帐这里我的网站: http://www.chrislondon.co/php-persistent-login/

有了这个PersistentAuth类有你将不得不做出一些改变。 一,你就必须改变getDb()函数返回数据库的实例。 我在这个例子中使用PDO。 我有它设置为每个页面刷新清除旧会话的数据库。 处理这种情况的最好方法是使用一个cron。 如果你设置cron然后更改USE_CRON标志设置为true的类设置



文章来源: Where can I find a PHP/MySQL implementation of Charles Miller's “Persistent Login Cookie” solution?