建议
一 在IE的"工具/Internet选项"的"常规"选项卡中,选择"设置/查看文件",查看所有保存到你电脑里的Cookies。这些文件通常是以 user@domain格式命名的(user是你的本地用户名,domain是所访问的网站的域名。)如果你使用NetsCape浏览器,应该就存放在"C: /PROGRAMFILES/NETS- CAPE/USERS/"里面,与IE不同的是,NETSCAPE是使用一个Cookie文件记录所有网站的Cookies。
二 打开"工具/Internet选项"中的"隐私"选项卡,调整Cookie的安全级别。
通常情况,可以调整到"中高"或者"高"的位置。
多数的论坛站点需要使用Cookie信息,如果你从来不去这些地方,可以将安全级调到"阻止所有Cookies"
如果只是为了禁止个别网站的Cookie,可以单击"编辑 "按钮,将要屏蔽的网站添加到列表中。
在"高级"按钮选项中,你可以对第一方Cookie和第三方的Cookie进行设置,第一方Cookie是你正在浏览的网站的Cookie,第三方Cookie是非正在浏览的网站发给你的Cookie,通常要对第三方Cookie选择"拒绝"。
你如果需要保存 Cookie,可以使用IE的"导入导出"功能,打开"文件/导入导出",按提示 *** 作即可。
祝您愉快!
cookie是临时文件的意思,保存浏览网页的痕迹,再次登录的时候判断你是不是登陆过该网站。
IE浏览器有时候会出现打不开要浏览的网页的问题,这是需要设置接受所有cookie。
打开浏览器设置窗口,找到Internet选项;
点击Internet选项d出如下窗口;
找到上方的隐私项,点击隐私;
将Internet区域设置选项拉到最下方,显示接受所有cookie,点击确定即可;
关闭浏览器重新登陆打开需要的窗口,即可进去入。
在使用完浏览器后也可以手动删除cookie;
设置—安全—删除浏览历史记录d出删除浏览历史记录的对话框,选择cookie和网站数据,点击下方的删除即可删除之前在浏览器下的cookie记录。
应用鉴权就是当一个用户进入APP时,我们需要判断他所拥有的权利,根据权力来判断他所能进行的一个行为,最为常见的就是购物网站的登录以及购物支付等 *** 作。
Http的请求是无状态的,就是说在一个Http请求中的请求方和响应方都是无法维护状态,是一次性的,所以我们就不知道请求前后都发生了什么。所以我们需要标记的功能,而浏览器的sessionStorage,localStorage,全局变量等限制太多,就有了cookie,session,token等鉴权的 *** 作。
cookie也是一种前端存储的方式,但是他和sessionStorage,localStorage等本地存储的不同在于,浏览器向服务端发起请求的时候,cooike是自动传过去的,可以做到前端无感知,出错的概率更低
过程:
1.浏览器向服务器发起请求并传送数据,由服务器接收数据然后设置cooike放进响应头(Set-Cookie),浏览器接收到响应之后就会自动存储进cookie
2.在之后的每一次请求中浏览器都会自动的在请求头之中设置cookie字段,发送给服务端
配置:
1.Domain/Path
cookie 是要限制空间范围的,通过 Domain(域)/ Path(路径)两级。
2.Expires / Max-Age
cookie 还可以限制时间范围,通过 Expires、Max-Age 中的一种。
3.Secure / HttpOnly
cookie 可以限制使用方式。
Http头对cookie的读写:
响应会携带一个Set-Cookie头,一个Set-Cookie只能设置一条cookie,格式为cookie键值+配置键值,如果想要一次设置多个cookie,我们可以多写几个Set-Cookie在头里面。
而当浏览器请求服务器的时候,就不再需要发送配置内容了,只需要发送键值对就可以
前端对cookie的读写 *** 作:
如果服务端设置的cookie并没有设置httpOnly,那么我们就可以调用document.cookie来对cookie进行读写 *** 作,但一次调用document.cookie就只能 *** 作一个cookie
在上面我们介绍了cookie,可以了解到cookie其实是浏览器存储的一种实现,可以看作应用鉴权的基石。但是它只是一个存储信息的工具,我们还需要判断其中的信息是不是安全的 *** 作者,这时候我们就需要session了。
典型的session登录流程:
session的存储与过期销毁:
由于session是用来验证的,所以服务端仅仅只是给浏览器的cookie中添加一个sessionid,所以也需要自己保存一下,存储的方式:
而session也可以手动设置过期时间,一到过期时间就直接清空存储的内存就好了
session的分布式问题:
由于服务端是集群,而用户请求过来会走一次负载均衡,不一定会打到哪台机器上。一旦用户后续接口请求到的机器和他登录请求的机器不一样,或者登录请求的机器出问题了,那session就会失效。
常见的解决方式:
目前主流的token存储还是在cookie中进行,但是为了防止伪造token造成的安全问题,我们还需要一些加密算法来生成签名,来保证数据安全性
业务接口用来鉴权的 token,我们称之为 access token。越是权限敏感的业务,我们越希望 access token 有效期足够短,以避免被盗用。但过短的有效期会造成 access token 经常过期,过期后怎么办呢?
一种办法是,让用户重新登录获取新 token,显然不够友好,要知道有的 access token 过期时间可能只有几分钟。
另外一种办法是,再来一个 token,一个专门生成 access token 的 token,我们称为 refresh token。
如果refresh token过期了,就只能重新登陆了。
客户端存cookie与存放于其他地方
1.出了浏览器环境之外就没有cookie了;
2.cookie是浏览器在域下自动携带的。很容易引发CSFR攻击
存放在别的地方可以解决部分问题
服务端存储数据于不存
1.存数据的话可以缩短认证字符串的长度,减小请求体积
2.不存数据就不会出现分布式处理的问题,降低硬件成本,避免查库带来的验证延迟
前面我们已经知道了,在同域下的客户端/服务端认证系统中,通过客户端携带凭证,维持一段时间内的登录状态。
但当我们业务线越来越多,就会有更多业务系统分散到不同域名下,就需要「一次登录,全线通用」的能力,叫做「单点登录」。
在 主域名相同 的情况下,就可以直接把cookie设置为主域名就可以实现了。
如果 主域名不同 ,我们就需要独立的认证服务,称为SSO。
如果是在浏览器之下实现,我们需要考虑其他的东西
对浏览器来说,SSO 域下返回的数据要怎么存,才能在访问 A 的时候带上?浏览器对跨域有严格限制,cookie、localStorage 等方式都是有域限制的。
这就需要也只能由 A 提供 A 域下存储凭证的能力。一般我们是这么做的:
图中我们通过颜色把浏览器当前所处的域名标记出来。注意图中灰底文字说明部分的变化。
1.HTTP 是无状态的,为了维持前后请求,需要前端存储标记
2.cookie 是一种完善的标记方式,通过 HTTP 头或 js *** 作,有对应的安全策略,是大多数状态管理方案的基石
3.session 是一种状态管理方案,前端通过 cookie 存储 id,后端存储数据,但后端要处理分布式问题
4.token 是另一种状态管理方案,相比于 session 不需要后端存储,数据全部存在前端,解放后端,释放灵活性
5.token 的编码技术,通常基于 base64,或增加加密算法防篡改,jwt 是一种成熟的编码方案
6.在复杂系统中,token 可通过 service token、refresh token 的分权,同时满足安全性和用户体验
7.session 和 token 的对比就是「用不用cookie」和「后端存不存」的对比
8.单点登录要求不同域下的系统「一次登录,全线通用」,通常由独立的 SSO 系统记录登录状态、下发 ticket,各业务系统配合存储和认证 ticket
阅读知乎文章: 鉴权必须了解的5个兄弟:cookie、session、token、jwt、单点登录 - 知乎 (zhihu.com)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)