小弟做登录模块 有一事想请教!
在登录的时候 实现记住我的功能 看了很多文章都是
在客户端生成一个用户标识的Cookie!
那么这个Cookie 我可以只生成一个 用户名吗? 因为我感觉把密码也生成到浏览器非常不安全! 看了很多文章都是把用户名和密码生成到客户端!
但是我反编译了Identity框架 发现MVC自带的权限系统也并没有把密码生成到客户端!
还望大神给点意见!
密码是绝对不允许放到客户端的,你想下这玩意你放客户端,我要是有点闲功夫,自己走个流程,我知道明文密文,往死了推也可以推断出你加密策略。而且如果你更改了密码验证策略,那么你让那些使用老密码策略的用户怎么办?
如果你要做这种功能,建议在登录的时候返回一个唯一的token,类似sessionid,同时记录用户的ip等信息供下次直接登录验证用。
密码加密就行了
Session可以么?……
通常都是把用户名加密保存到客户端,没见过把密码保存在客户端的。
那下次登录判断就直接判断用户名为不为空就行了?
@狂扁小朋友: 可以通过 Request.IsAuthenticated 或者 User.Identity.IsAuthenticated 判断用户是否登录
加密!
用token来识别。数据加一张token表,用户登录后如果是记住密码的话,自动生成token存入,token与用户信息(用户ID,登录的浏览器useragent)关联并记录失效日期,然后在浏览器cookie里面放token和用户名和当前你给的唯一客户端识别。下次登录页面自己查看cookie里面的信息,有token等信息就去对比判断。然后自动登录。
用户名加密保存在客户端
那下次登录判断就直接判断用户名为不为空就行了?
把用户名加密保存在客户端就行了,密码加密保存在客户端有可能会泄露你的密码以及加密方式,可能会产生严重的后果。
那下次登录判断就直接判断用户名为不为空就行了?
@狂扁小朋友:你是说打开登录页面就会自动把账号密码填充上去吗
@perla: 不是 是判断用户登录验证!
每次访问一操作 都要判断它的身份是否验证! 竟然我已经把标识保存到客户端了 我只需要判断这个标识是不是为空就行了呢!
@狂扁小朋友: 如果是这样的话,我建议你存到服务端的session中,然后每次检查这个标识是否为空就行了。我一直以为你是前端的“记住我”。
生成唯一的id 作为token,例如userid+时间戳,或者用uuid工具生成一个,userid做key即可,保证一个用户vs一个唯一标示就可以实现记住我。。