小弟在学web 身份验证和授权方面的知识,但是有个问题一直很迷惑
看了很多资料 保持身份状态(下一次访问网站无需再登陆) 使用Cooike和Session来保持身份状态的
但是我看了下 Session资料 这个服务器缓存 默认只保存2个小时啊! 那比如博客园和其它的网站是如何把身份状态保持在1个月以上的呢? 还是我理解错了呢?望有经验的大神科普下
cookie 设置时间 只要不清空本地缓存 就可以一直存在
意思是不需要服务器缓存对吗?
@狂扁小朋友: 服务器缓存 除非是 分布式缓存 一般的其他的缓存 重启 机器后就会消失
@狂扁小朋友: 具体的数据可以通过服务器去取 但是 状态 和标记值 可以放到cookie里面
@小眼睛老鼠:
我一直以为 服务器也要缓存一个标识 看来貌似不用
我最开始理解为 浏览器只存储一个身份标识的Cookie 然后每次浏览器带上这个标识 我再根据这个标识匹配存储在服务器里的缓存标识以此来查询缓存的用户身份对象
@狂扁小朋友: cookie 缓存只是个容器
你可以在这里面 存一个标记 例如id
也可以存一个序列化过的对象
Cooike token可以实现永久
我知道Cookie时间可以设置很长 但是关键是Session只能保存2个小时啊 比如每一次浏览器访问都会带上这个标识Cookie 我会和Session里面的标识匹配啊
@狂扁小朋友: 你就不会自己写个cookie.然后把cookie的值放数据库啊
@吴瑞祥: 其实我想问的是 你们平时是怎么做的呢? 我最近在使用ASP.NET Identity框架 但是这个是基于OWIN中间件的 封装的太厉害 我看不到原理 它就没存储在数据库里 但是依然可以保存很久 我一直不知道它是如何做到的
@狂扁小朋友: 谁告诉你他没有存在数据库里....
@吴瑞祥: 我测试了 确实没在数据库里 貌似存储在IIS里面 因为我把IIS重启 那个身份状态就不存在了
@狂扁小朋友: 你试试选中那个记住我.
@吴瑞祥: 我已经确认了 昨晚上把源码看了一遍 确认它没有存储Cookie到数据库 它只存储在浏览器 发生在第一次登陆的时候 那个Cookie加密的 保存的有除密码外用户等信息
@狂扁小朋友: 我一直以为是通过那个login表的.原来是直接cookie的..
cookie 有个过期时间。想设置多长就多长
如果是forms验证授权。就在web.config中配置这个时间就可以了
我知道Cookie时间可以设置很长 但是关键是Session只能保存2个小时啊 比如每一次浏览器访问都会带上这个标识Cookie 我会和Session里面的标识匹配啊
@狂扁小朋友:
我想,你这个理解错了。
forms方式的authentication。使用cookie加解密的。你服务器重启。登录信息也还是在的。
如果你是有自定义的逻辑在里面,可以重写系统的formsauthentication模块。加入你自定义的代码。比如往session里面写入点什么。
@calvinK: 意思是只使用Cookie存储客户端 服务器不需要存储任何信息吗? 可能我理解有点错了 我一直认为服务器Session里面存储的有用户的一些信息 比如用户名 角色之类的 而浏览器只存储一个Cookie凭证 每次浏览器带上这个凭证 我再去匹配 查看用户的名称 角色等
@狂扁小朋友: formsauthentication和session没有任何关系。他不依赖session
@calvinK: 你说的是MemberShip那个表单认证框架吗? 确实 我现在学习Identity框架 我查了源码没有Session的 它是只存储了Cookie
@狂扁小朋友: membership,identity,还是其他的。都是forms验证方式。都是用的cookie
localstorage是什么概念呢?
@狂扁小朋友: 是H5的本地存储,永久性存储
用cook保存,设置过期时间为你想要的不久可以啦
我一直以为 服务器也要缓存一个标识 看来貌似不用
我最开始理解为 浏览器只存储一个身份标识的Cookie 然后每次浏览器带上这个标识 我再根据这个标识匹配存储在服务器里的缓存标识以此来查询缓存的用户身份对象