php 记住密码自动登录

2020-03-27编程32

在一些业务要求中"登录"这一操作是需要简化的. 这个功能非常简单, 但同时也非常危险(暴露用户名和密码).

最简单(也是最容易暴露)的记住密码是使用cookie将用户名与密码保留存在客户浏览器中, 下次登录时Javascript将cookie的用户名与密码填入表单中进行登录(或ajax传输用户名密码进行登录). 

能直接填入表单(ajax请求)进行登录, 那么cookie保存的信息特别容易暴漏或被盗.

安全的做法是:

当用户登录成功, 服务器返回一个token数据.

客户端接收到返回信息时, cookie将token数据保存在客户端.

如果登录超时需要重新登录时, 程序优先判断客户端是否存在合法的token数据, 如果有生成session记录登录状态.

当然也可以每次用户请求时判断token的合法性, 更新session保持登录状态.

token是MD5(sha1)加密的字符串.

程序安需要生成token, 并在数据库中插入此数据.

客户端每次请求时, 程序会根据传输过来的token检查数据库表中是否存在并查出对应用户数据生成(更新)session.

表机构:

CREATE TABLE IF NOT EXISTS ´xx_token´ (

  ´id´ int(11) UNSIGNED NOT NULL AUTO_INCREMENT,

  ´token´ varchar(32) NOT NULL DEFAULT '' COMMENT '',

  ´user_id´ int(11) unsigned NOT NULL DEFAULT '0' COMMENT '用户ID',

  ´create_time´ int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',

  PRIMARY KEY (´id´),

  UNIQUE KEY ´token´ (´token´),

  UNIQUE KEY ´user_id´ (´user_id´)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '记住密码';

生成token:

$token ->ip() . request()->server('HTTP_USER_AGENT') . $user->id);