首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在哪里可以找到Charles Miller的“持久性Login Cookie”解决方案的PHP/MySQL实现?

在哪里可以找到Charles Miller的“持久性Login Cookie”解决方案的PHP/MySQL实现?
EN

Stack Overflow用户
提问于 2013-03-26 20:57:51
回答 1查看 1.3K关注 0票数 2

我在这里一次又一次地看到Charles的"持久登录Cookie最佳实践“推荐为在站点上实现”记住我“功能的绝对最佳方式(如果您真的,真的需要这个功能,我会这么做)。

然而,我已经浏览过web,我找不到任何实际的PHP/MySQL代码来实现他的解决方案,而且由于“安全性”在使用“记住我”方面被强调了无数次,所以我害怕自己从头开始编写代码,因为我害怕我会误解一些东西或者犯了一个错误,这会导致一个巨大的安全漏洞。

由于他的解决方案已经将近10年了,而且碰巧是多数被否决的答案,所以对于持久性Login,肯定有一些经过审查的PHP/MySQL代码,它们正确地跟踪了他的解决方案,没有任何意外的安全漏洞。(我发现的最接近的东西是Drupal模块,但我不使用Drupal。)

有人知道我在哪里能找到它吗?

EN

回答 1

Stack Overflow用户

发布于 2013-04-08 15:27:16

在阅读了关于StackOverflow的一个问题之后,我通过为本教程编写了Charles的“持久性login最佳实践”的PHP/MySQL实现来帮助他解决这个问题,我将假设您已经有了一个带有用户登录的PHP系统。

代码语言:javascript
复制
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中。此代码将与您当前的登录系统相匹配。

代码语言:javascript
复制
if (/* Code that verifies credentials */) {
  // ... code to log user into session

  PersistentAuth::login($userId);
}

第二,我们希望检查站点的新用户是否具有cookie凭据。这段代码将在代码的开头进行。它检查,首先,我们是否已经登录到我们的$_SESSION?如果没有,请尝试基于cookie的登录。

代码语言:javascript
复制
if (/* !loggedIn() */ && ($userId = PersistentAuth::cookieLogin())) {
  // ... use $userId to log user into session 
}

第三,根据Charles Miller的文章,如果用户是通过cookie登录的,我们不能允许用户访问以下部分:

  • 更改用户密码
  • 更改用户的电子邮件地址(特别是如果使用基于电子邮件的密码恢复)
  • 任何对用户地址、付款细节或财务信息的访问
  • 任何购买的能力

代码:

代码语言:javascript
复制
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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15647261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档