在一些业务要求中"登录"这一操作是需要简化的. 这个功能非常简单, 但同时也非常危险(暴露用户名和密码).
最简单(也是最容易暴露)的记住密码是使用cookie将用户名与密码保留存在客户浏览器中, 下次登录时Javascript将cookie的用户名与密码填入表单中进行登录(或ajax传输用户名密码进行登录).
能直接填入表单(ajax请求)进行登录, 那么cookie保存的信息特别容易暴漏或被盗.
安全的做法是:
当用户登录成功, 服务器返回一个token数据.
客户端接收到返回信息时, cookie将token数据保存在客户端.
如果登录超时需要重新登录时, 程序优先判断客户端是否存在合法的token数据, 如果有生成session记录登录状态.
当然也可以每次用户请求时判断token的合法性, 更新session保持登录状态.
token是MD5(sha1)加密的字符串.
程序安需要生成token, 并在数据库中插入此数据.
客户端每次请求时, 程序会根据传输过来的token检查数据库表中是否存在并查出对应用户数据生成(更新)session.
表机构:
CREATETABLEIFNOTEXISTS´xx_token´(
´id´int(11)UNSIGNEDNOTNULLAUTO_INCREMENT,
´token´varchar(32)NOTNULLDEFAULT''COMMENT'',
´user_id´int(11)unsignedNOTNULLDEFAULT'0'COMMENT'用户ID',
´create_time´int(11)unsignedNOTNULLDEFAULT'0'COMMENT'创建时间',
PRIMARYKEY(´id´),
UNIQUEKEY´token´(´token´),
UNIQUEKEY´user_id´(´user_id´)
)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COMMENT'记住密码';
生成token:
$token -ip() . request()-server('HTTP_USER_AGENT') . $user-id);