文档章节

关掉浏览器后,再次打开浏览器,记住用户登录状态是怎么实现的?

Corwien
 Corwien
发布于 2015/12/31 10:52
字数 832
阅读 828
收藏 6

呵呵,我的意思是隔很长时间后,再次打开网站,依然保持着登录的状态

不是指一次会话的情况下,保持用户状态

主要是求大大来指点一下这样做怎样不好,那样做又有神马问题

我理解主要是由两种方式

第一种:将用户ID和密码加密之后放在用户浏览器cookie里,设置一个很长的过期时间,每次登陆的时候,先解码,然后通过用户名密码验证用户

这种方法我总感觉如果加密做的不好的话,会把用户密码泄露出去

第二种:在服务器端保存用户的数据,让其与一个唯一的ID关联,然后浏览器端cookie保存这个随机的ID很长时间,下一次只要拿着这个ID过来,服务器在自己这边找一找看看能不能找到用户数据,找到了就将数据赋给session

这种方法需要服务器端保存一定的数据,我也不知道这种拿着一个ID就过来验证身份的方法是不是安全

大大们帮我分析一下,这两种做法的利弊

我现在感觉,保存id和密码在cookie里的方式只是省去了在服务器端保存数据的开销,没有神马其他的好处,是这样吗?


回答:

永远不要在cookie里存放任何形式的密码。

用第二种。


还是需要记录一类的唯一验证的东西,防止 cookie 欺骗,比如存储未公开数据库的 uid 的 MD5 加密,然后服务器读取验证,或者使用其他比较强悍的密码加密手段,比如我的  MD5( sha256( $password ) . $userid ),但还是有泄漏密码的危险,需要找到一个平衡点。。


刘诗诗 赞同

cookies千万不要放密码,加密的不可逆密码也不行,现在电脑的计算能力越来越强,利用穷举法就可以破解你的密码。


密码/权限信息等等千万不要保存在cookie里面.
cookie里面只保存用户的id和上次登陆时间和你觉得还需要的非敏感数据(当然它们需要使用可逆的加密算法来加密保证不被伪造). 然后服务器端根据用户然后在涉及敏感数据(比如付款,修改密码等,跟你的系统需求而定)的地方对长时间(例如:上次登陆距离现在超过了24小时)登陆的用户采取密码确认的方式来强制验证用户的身份.


不会放用户名密码的。我了解的方法是在cookie里种了一个自动登陆的piao据,失效时间较长,有可能是将你id,密码,登陆时间戳,私钥加密后做为cookie。也有可能加了你的登陆ip,这样别人盗取你的cookie也不会让你的信息丢失。


本文转载自:http://www.zhihu.com/question/20299298

共有 人打赏支持
Corwien
粉丝 27
博文 149
码字总数 115164
作品 0
广州
程序员
私信 提问
如何构建安全的“记住我”的特性

流程如下————一个用户登入了你的网站。次日再来到你的网站时....不得不再登录一次。“记住我”特性让被授权的登入状态得以一直保持下去而不受使用的直接范围的影响。这句话的意思是说你可...

oschina
2013/07/01
5K
24
网站免登陆时怎么实现的? 

@红薯 @彭博 很多人说利用cookie保存加密后的密码和用户ID,当再次访问网站时服务器提取cookie的用户ID和密码,如果通过验证,则不需要重新输入账号和密码。 oschina好像就是这么实现的。当登...

mj4738
2013/05/28
2.7K
3
Spring Security 实战 - Remember me

有个用户初访并登录了你的网站,然而第二天又来了,却必须再次登录 于是就有了“记住我”这样的功能来方便用户使用,然而有一件不言自明的事情,那就是这种认证状态的”旷日持久“早已超出了...

JavaEdge
11/21
0
0
Shiro的 rememberMe 功能使用指导(为什么rememberMe设置了没作用?)

问题 shiro中提供了rememberMe功能,它用起来是这样的 [java] view plaincopy UsernamePasswordToken token = new UsernamePasswordToken(loginForm.getUsername(),loginForm.getPassword())......

Jerry-
2015/05/27
0
2
shiro 怎样在Remember的情况 自动登录?

shiro 在浏览器关掉,然后再次打开访问网站的时候. 如果某些url是auth才能访问的那么就必须先login 如果密码没有经过加密是可以通过Subject.getPrincipal() 查询数据库 构造UsernamePasswor...

caiw
2014/06/07
869
1

没有更多内容

加载失败,请刷新页面

加载更多

EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
3
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
6
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
6
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
5
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部