php 下次自动登录,session cookie实现自动登录(下次自动登录)

我们在很多社区网站在登录口都有一个下次自动登录选项,如果我们选中了,下次进入网站就会自动登录了,那么下次自动登录是如何实现的呢?下面一聚教程小编就来与大家一起参考参考吧。

你会发现, 只要登录的时候勾选上这个框框(ps: 你的提示文字最好使用label+for), 即使你关闭浏览器再重新打开还是"已经登录的状态", 可能你也知道, 大多网站都是用session记录标识, 因为使用cookie记录不太安全, 可以被伪造, 那么session关闭浏览器会清空, 那还乍的记录标识呢? 嘎嘎, 接着往下看

session+cookie验证登录

大概的思路是在登录成功后, 记录session标识, 并根据相关参数写入cookie, 当然不会包含重要信息, 每次用户刷新页面, 会进行session判定, 如果没有, 则进行cookie判定, 如果正确则查库并写入session,大概伪代码是这样的:

每个页面初始化

开启session;

if(session存在){

//已经登录

} else {

if(指定cookie存在){

//解密cookie

if(匹配成功){

//查询数据库

if(有这个用户){

//写入session, 这里是否还用更新cookie信息你说了算

} else {

//假的也想进我的站?

}

} else {

//小样, 还想伪造 cookie? 嘎嘎

}

} else {

//这里认为没有登录

}

}

//这里已经知道用户登录的状态了

登录页面埋点

开启session;

if(各种表单验证通过){

//写入session, 并提取uid,uname等不敏感信息再加自己的密钥生成唯一的token码, 用base64方式写入cookie, 这里为了让重启浏览器或者session过期后使用

}

但是你有没有发现, 如果为一个正常的用户, 在没有登录状态下, 上面初始化代码会在每个页面进行判定, 感觉不太帅, 且可能被别人伪造cookie, 如果站内涉及到$方面的事就更不好了, 于是改之:

session分权限等级方式

我们设置session标识, 0为未登录, 1为已登录, 2为cookie方式登录(这样就可以针对这样的用户进行再次验证), 然后我们需要改我们的伪代码.

页面初始化

开启session;

if(session存在){

if(session > 0){

//如果>0则说明已登录

} else {

//这里说明没有登录, 这个状态码是cookie验证没通过时留下的

}

} else {

//这里验证session不存在, 但可能cookie存在, 所以需要验证

if(cookie存在){

//这里进行解密

if(成功){

//查数据库

if(成功){

//session = 2, 为啥=2? 因为打上标识说明这次的登录方式是使用cookie验证登录的, 以方便在进行安全操作的时候再次验证

} else {

// session = 0

}

} else {

//session = 0

}

} else {

//cookie不存在的话视为没有登录, 这里把session标识 = 0, 以方便下次验证

}

}

登录页面埋点

开启session;

if(各种表单验证通过){

// session = 1, 打上标识说明是正常登录方式, 并生成token存入cookie以便下次使用

}

重要操作时再次验证, 比如: 交易等

开启session;

if(session===2){

//弹出登录层 或者 跳转到登录页面再次验证, 是不是觉得跟taobao.com很像, 嘎嘎

}

致此验证完比, 当然实际使用哪种方式对token进行加密视项目情况而定, 但建议别使用敏感信息, 因为cookie你懂的...

你可能会想到这些问题

问: 清空cookie后这种方式就不行了?

答: 是的, 目前再主流的站, 只要你把缓存清空, 这里缓存包括任何, 比如 cookie, localStorage, sessionStorage, userDB, Web SQL, IndexdDB等, 你再重启浏览器, 我就不信你还是登录状态...(ps: 什么, 真的还是? 请留言反馈给我, 谢谢)

问: 这样岂不是知道cookie就可以直接登录?

答: 理论上是的, 只要用户知道你的加密方式, 写入个cookie理论是ok的, 但重要的地方建议登录再次验证, 当然只能说你点被...

问: 我复制某人的cookie岂不是就直接登录了?

答: 理论上还真是, 这可能就涉及到注入,攻击啥的了, 那如果这样的话, 要不是把浏览器相关信息+系统相关信息也加密到token里啊, 解密的时候再进行浏览器判断... 感觉好复杂啊...

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值