① 前端开发中 cookie使用的总结
cookie 是存储于用户的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。可以使用 JavaScript或者jQuery 来创建和读取cookie 的值。
1.创建cookie 并且保存
// 函数中的参数分别为 cookie 的名称、值以及过期天数
2.读取cookie
3.判断cookie是否存在
② 如何让浏览器保存我的cookies
在INTERNET选项 内容 自动完成 里面有一个表单和密码。再把提示我保存用户名和密码那两个。。选上。。确定就行了。
③ asp如何实现当鼠标离开输入框,自动保存输入框里的内容到cookie里
文本框onblur事件,用webservice调用后台(把文本框的内容保存到cookie)的方法,后台的webMethod返回类型不能是void的
④ 网页设计中自动保存COOKIE的问题
cookie是保存在客户端的,如果用户的浏览器设置不使用cookie则会造成登录信息消失,可以提醒用户开启cookie,或者使用session保存登录信息。
⑤ 前端页面之间传值--利用cookie存储全局变量
需求说明:需要在页面之间进行传值,但又无法直接通过在URL中拼接参数的方法获取。此时可以利用前端浏览器的一个属性cookie,将所需信息存放到cookie中,而后再获取利用,进行下一系列的操作。
设置、获取cookie的封装函数方法如下:
注:上述设置、获取方法只能是存储和获取字符串,而不能是对象。即每次存储cookie,对应key的value值必须是单个的字符串。
以上。
⑥ JS 怎么保存Cookie~~
//writeCookie("myCookie","myname",24);
//Storesthestring"myname"inthecookie"myCookie"whichexpiresafter24hours.
//Thehoursparameterisoptional;ifhoursisleftout,'sbrowsersession.
functionwriteCookie(name,value,hours)
{
varexpire="";
if(hours!=null)
{
expire=newDate((newDate()).getTime()+hours*3600000);
expire=";expires="+expire.toGMTString();
}
document.cookie=name+"="+escape(value)+expire;
}
⑦ cookie前端存储有哪几种
1、cookie
HTTP cookie,通常直接叫做cookie,是客户端用来存储数据的一种选项,它既可以在客户端设置也可以在服务器端设置。cookie会跟随任意HTTP请求一起发送。
优点:兼容性好
缺点:一是增加了网络流量;二则是它的数据容量有限,最多只能存储4KB的数据,浏览器之间各有不同;三是不安全。
2、userData
userData是微软通过一个自定义行为引入的持久化用户数据的概念。用户数据允许每个文档最多128KB数据,每个域名最多1MB数据。
缺点:userData不是 web 标准的一部分,只有IE支持。
3、web存储机制
web storage,包括两种:sessionStorage 和 localStorage,前者严格用于一个浏览器会话中存储数据,因为数据在浏览器关闭后会立即删除;后者则用于跨会话持久化地存储数据。
缺点:IE不支持 SessionStorage,低版本IE ( IE6, IE7 ) 不支持 LocalStorage,并且不支持查询语言
4、indexedDB
indexed Database API,简称为indexedDB,是在浏览器中保存结构化数据的一种“数据库”。它类似SQL数据库的结构化数据存储机制,代替了废弃已久的web SQL Database API,它能够在客户端存储大量的结构化数据,并且使用索引高效检索的API。
缺点:兼容性不好,未得到大部分浏览器的支持。
5、Flash cookie
Flash本地存储,类似于HTTP cookie,它是利用 SharedObject类来实现本地存储信息。它默认允许每个站点存储不超过100K的数据,远大于cookie,而且能够跨浏览器。
缺点:浏览器需安装 Flash 控件,毕竟它是通过Flash的类来存储。所幸的是,没有安装Flash的用户极少。
6、Google Gears
Google Gears是Google在07年发布的一个开源浏览器插件,Gears 内置了一个基于SQLite的嵌入式 SQL数据库,并提供了统一API 对 数据库进行访问,在取得用户授权之后,每个站点可以在SQL数据库中存储“不限大小”的数据。
缺点:需要安装 Google Gears 组件
⑧ 说一下前端数据存储方式(cookies,localstorage,sessionstorage,indexedDB)的区别
Cookie最初是在客户端用于存储会话信息的,其要求服务器对任意HTTP请求发送Set-CookieHTTP头作为响应的一部分。cookie
以name为名称,以value为值,名和值在传送时都必须是URL编码的。浏览器会存储这样的会话信息,在这之后,通过为每个请求添加Cookie
HTTP头将信息发送回服务器。
localstorage
存储方式:
以键值对(Key-Value)的方式存储,永久存储,永不失效,除非手动删除。
sessionstorage
HTML5 的本地存储 API 中的 localStorage 与 sessionStorage 在使用方法上是相同的,区别在于 sessionStorage 在关闭页面后即被清空,而 localStorage 则会一直保存。
IndexedDB
索引数据库(IndexedDB) API(作为 HTML5 的一部分)对创建具有丰富本地存储数据的数据密集型的离线 HTML5 Web 应用程序很有用。同时它还有助于本地缓存数据,使传统在线 Web 应用程序(比如移动 Web 应用程序)能够更快地运行和响应。
⑨ 浏览器中的cookie存储
cookie:cookie数据会自动在web浏览器和web服务器之间传输,也就是说当发送http请求时,就会把该请求下域名所有的cookie值发送到web服务器端。因此服务器脚本可以对存储在客户端的cookie值进行读写操作。cookie的有效期是很短暂的,一般关闭浏览器,cookie保存的数据就会丢失,要想延长cookie的有效期,可以通过设置http头信息来实现。服务器保存cookie的数目一般不超过50个,每个不能大于4KB;cookie的优点是能在可以和服务器进行通信。缺点是它会随着http头信息一起发送的,增加网络流量,他只能存储少量数据,只能存储字符串,存在安全问题。
⑩ 应用鉴权
应用鉴权就是当一个用户进入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、单点登录 - 知乎 (hu.com)