JS中浏览器的数据存储机制

时间:2022-12-11 14:34:43

一、JS中的三种数据存储方式

cookie、sessionStorage、localStorage

二、cookie

1、cookie的定义:

cookie是存储在浏览器上的一小段数据,用来记录某些当页面关闭或者刷新后仍然需要记录的信息。在控制台用document.cookie可以查看当前正在浏览网站的cookie。

2、cookie存在安全问题:

cookie虽然很方便,但是使用cookie有一个很大的弊端,cookie中的所有数据在客户端就可以被修改,数据非常容易被伪造,那么一些重要的数据就不能放在cookie中了,而且如果cookie中数据字段太多会影响传输效率

3、cookie的作用

  • 保存用户登录状态。例如将用户id存储于一个cookie内,这样当用户下次访问该页面时就不需要重新登录了,现在很多论坛和社区都提供这样的功能。 cookie还可以设置过期时间,当超过时间期限后,cookie就会自动消失。因此,系统往往可以提示用户保持登录状态的时间:常见选项有一个月、三个 月、一年等。

  • 跟踪用户行为。例如一个天气预报网站,能够根据用户选择的地区显示当地的天气情况。如果每次都需要选择所在地是烦琐的,当利用了 cookie后就会显得很人性化了,系统能够记住上一次访问的地区,当下次再打开该页面时,它就会自动显示上次用户所在地区的天气情况。因为一切都是在后 台完成,所以这样的页面就像为某个用户所定制的一样,使用起来非常方便

  • 定制页面。如果网站提供了换肤或更换布局的功能,那么可以使用cookie来记录用户的选项,例如:背景色、分辨率等。当用户下次访问时,仍然可以保存上一次访问的界面风格。

三、sessionStorage

当用户用账号和密码登录某个网站后,刷新页面仍然保持登录的状态,服务器如何分辨这次发起请求的用户是刚才登录过的用户呢?这里就是用session保存状态。

用户在输入用户名密码提交给服务器,服务端验证通过后会创建一个session用于记录用户的相关信息,这个session可保存在服务器内存中也可保存在数据库中。

  • 创建session后,会把关联的session_id通过setCookie添加到http相应头部
  • 浏览器在加载页面时发现响应头部有set-cookie字段,就把这个cookie种到浏览器指定域名下
  • 当下次刷新页面时,发送的请求会带上这条cookie,服务端在接收到后根据这个session_id来识别用户。

四、localStorage

  • localStorage是H5本地存储web storage特性的API之一,用于将大量数据(最大5M)保存在浏览器中,保存后数据永远存在不会失效过期,除非用js手动清除。

  • 不参与网络传输

  • 一般用于性能优化,可以保存图片、js、css、html模板、大量数据

五、cookie、sessionStorage、localStorage之间的区别

相同点:都是存储在浏览器端。并且是同源的

不同点:

1、存储大小

一般浏览器存储cookie最大容量为4kb,很多浏览器都限制一个站点最多保存20个cookie。

sessionStorage和localStorage虽然也有存储大小的限制,但是要比cookie大得多。

2、存储有效期:

cookie保存的数据在过期时间之前一直有效,即使关闭浏览器

sessionStorage保存的数据用于浏览器的一次会话(session),当会话结束(通常是窗口关闭),数据被清空;

localStorage保存的数据长期存在,因为localStorage的数据是写入磁盘中,每次读取数据时,实际上是从硬盘驱动器上读取这些字节。

3、安全性

cookie中的所有数据在客户端就可以被修改,数据非常容易被伪造,所以对于用户信息来讲,应该将与登录相关的重要信息存储在session中。

4、性能

如果cookie中数据字段太多的话,会影响传输效率,此时需要将重要的信息存放在session中。

但是,session会在一定的时间内保存在服务器上,当访问增多时,会影响服务器的性能。为了减轻服务器的负担,应当使用cookie

参考链接:https://www.jianshu.com/p/775b64b3d35f

JS中浏览器的数据存储机制的更多相关文章

  1. 关于javascript数据存储机制的一个案例。

    之前在学习js的结合性的时候,我有点不太明白,在网上找到一个比较经典的C语言优先级结合性的案例,就是下边这一个.本想在js之中测试一番,结果竟然发现得出的结果和网上的不一样,这令我百思不得其解,后经高 ...

  2. window.name应用于浏览器端数据存储

    本代码简单地分享利用window.name实现浏览器端数据存储: 1.在同一个页面一个地方设置window.name = "abc",另外一个地方读取window.name,自然能 ...

  3. 浏览器本地数据存储解决方案以及cookie的坑

    本地数据存储解决方案以及cookie的坑 问题: cookie过长导致页面打开失败 背景: 在公司的项目中有一个需求是打开多个工单即在同一个页面中打开了多个tab(iframe),但是需要在刷新时只刷 ...

  4. Js中各类型数据到bool的转换

    在返回Json字符串给前台时遇到的问题,返回的bool数据总是为TRUE 特意查了一下,发现了Js中各类数据转换到bool型是的结果. 希望能给遇到同样问题的人一点帮助.  数据类型  转换为bool ...

  5. C#实现MySQL数据库中的blob数据存储

    在MySQL数据库中,有一种blob数据类型,用来存储文件.C#编程语言操作MySQL数据库需要使用MySQL官方组件MySQL.Data.dll. Mysql.Data.dll(6.9.6)组件下载 ...

  6. 1、安卓数据存储机制——sharedPreference

    项目中用到的数据存储方式: 1.这个项目里的“个人标签“.”个性签名“页面的文字存储——sharedPreference:我们项目中用到的Preference来保存用户编辑的标签.签名内容,并支持用户 ...

  7. 解决js中post提交数据并且跳转到指定页面的问题总结

    今天在开发中过程中遇到了这个问题,js中利用JQuery中的 $.post("url", id, function(){}); 这个方法是数据提交正常,但是后台处理完成之后跳转无法 ...

  8. js中如何将数据获得2位小数以及对数据进行千分位划分

    js中toFixed(n) 方法可把 数字四舍五入为指定小数位数n的数字,注意:这个方法只能对数据类型为Number的数据起作用,包括float,int等.例如:   123.12345.toFixe ...

  9. Java数据存储机制的实现

    原文地址:http://yanwushu.sinaapp.com/java_data_storage/ Java程序在执行时须要为一系列的值或者对象分配内存,这些值都存在什么地方?用什么样的数据结构存 ...

随机推荐

  1. ListView属性整理

    stackFromBottom属性,这只该属性之后你做好的列表就会显示你列表的最下面,值为true和false android:stackFromBottom="true"   第 ...

  2. MS14-025引起的问题 - 1

    windows2008有一个叫组策略首选项(Group Policy Preference)的新特性.这个特性可以方便管理员在整个域内部署策略.本文会详细介绍这个组策略首选项的一些缺陷.尤其是当下发的 ...

  3. every day english

    job is in your freedom, not your compliance. through no fault of his own. as far as I understand you ...

  4. EasyUI ComboBox默认值

    combobox数据加载完后设置默认值 $('#ck').combobox({ url: '/External/GetAllCk', valueField: 'Ddbh', textField: 'D ...

  5. C++学习笔记--Season 2

    一个简单的EGE程序: #include "graphics.h" //EGE库的头文件 int main(int argc, char** argv) { initgraph(, ...

  6. 浙大pat1042题解

    1042. Shuffling Machine (20) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Shu ...

  7. 第十章 MyBatis入门

    第十章   MyBatis入门10.1 MyBatis入门        优点:简单且功能强大.能够完全控制SQL语句.容易维护和修改    缺点:移植性不好    使用步骤:        1.下载 ...

  8. Flask-SQLAlchemy.........>model创建表

    import datetime from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarat ...

  9. gerrit工具的数据提交流程

    检查服务器有没有更新:1.检查服务器有没有更新git fetch如果有内容,代表服务器版本有更新,需要把本机修改暂存(第二步),拉下服务器内容(第三步)如果没有内容,代表服务器没有更新,跳至52.本地 ...

  10. 黑苹果 技嘉 B250M-DS3H-CF i57500 HD630 EFI引导驱动发布

    1. 鉴于苹果的MacOS OSX系统的优越性,由于现在公司的电脑为windows但是自己用的笔记本又是Mac,导致需要适应两套系统,超级麻烦.故想在电脑上装上黑苹果的计划 相关配置地址:https: ...