关于session和cookie的简单理解


Posted in Javascript onJune 08, 2016

0. 引子,我们为什么要cookie和session

因为http请求是无状态的(不能记录用户的登录状态等),所以需要某种机制来保存用户的登录状态等信息,在下次访问web服务的时候,不用再次校验是否登录等状态,session机制和cookie机制分别是在服务器端和浏览器端的解决方案。

1.关于cookie

1.1  什么是cookie

cookie,原意饼干。用来在浏览器端存储用户的状态信息,然后在访问后端的时候将这部分信息带回到后端。

cookie的内容主要包括:名字,值,过期时间,路径和域

1.2 cookie的分类

会话cookie  不设置过期时间的cookie 保存在浏览器的内存中,关闭浏览器,cookie便被销毁。(常常被用作session)

普通cookie  设置了过期时间   保存在硬盘上

1.3怎么应用

发起请求时:浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围(由路径和域决定)大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。

处理请求时:在服务器端, 一般会对请求头中带的cookie信息做检查(比如说登录检查),如果检查通过,才能进行实际的业务处理。

如果校验不通过,例如没有找到cookie或者cookie信息不正确(可能是伪造),跳转让其登录,然后登录完成之后,在响应中返回cookie信息,浏览器会根据返回的cookie信息,保存在硬盘或者内存中供下次使用。、

2.关于session

2.1什么是session

session 用来在服务器端保存用户的状态信息。

2.2怎么使用

浏览器发起请求时:服务器首先会读取请求头中session信息。如果没有找到session信息或者本地检索不到此sessionid,如果没有就新生成一个sessionid,存储到服务器硬盘或者memcache中。

浏览器接收到响应:会将这个返回的sessionID在本地内存也保存一份,供下一次请求使用。session保存在本地的其中一种实现方案是保存信息在cookie上,但是实际上cookie并不是session保存唯一解决方案,使用url重写的方式也可(把session id直接附加在URL路径的后面 )。

3.cookie和sessiond的主要区别

1、保存位置稍有区别

cookie数据存放在客户的浏览器上,服务器端不用保存。session数据放在服务器上,本地内存也有一份。

2、安全性不同

cookie安全性不如session。因为普通cookie保存在本地硬盘上,黑客可以伪造url等方式发起xss攻击,获取本地硬盘保存状态的cookie,进而窃取用户的敏感信息。

session则不同,只有在用户登录此网站时发起xss攻击才能获取session信息,关闭浏览器之后,session即被销毁,安全性较cookie要好

3.跨域支持上的不同

Cookie支持跨域名访问,例如将domain属性设置为“.biaodianfu.com”,则以“.biaodianfu.com”为后缀的一切域名均能够访问该Cookie。跨域名Cookie如今被普遍用在网络中,例如Google、Baidu、Sina等。而Session则不会支持跨域名访问。Session仅在他所在的域名内有效。

4.服务器压力的不同

Session是保管在服务器端的,每个用户都会产生一个Session。假如并发访问的用户十分多,会产生十分多的Session,耗费大量的内存。因而像Google、Baidu、Sina这样并发访问量极高的网站,是不太可能运用Session来追踪客户会话的。考虑到减轻服务器性能方面,应当使用COOKIE。

5. 存取方式的不同

Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数据,需求先进行编码。Cookie中也不能直接存取Java对象。若要存储略微复杂的信息,运用Cookie是比拟艰难的。

而Session中能够存取任何类型的数据,包括而不限于String、Integer、List、Map等。Session中也能够直接保管Java Bean乃至任何Java类,对象等,运用起来十分便当。能够把Session看做是一个Java容器类。

6.cookie的保存内容大小有限制

单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

以上这篇关于session和cookie的简单理解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript window.opener的用法分析
Apr 07 Javascript
利用JS重写Cognos右键菜单的实现代码
Apr 11 Javascript
jquery png 透明解决方案(推荐)
Aug 21 Javascript
六款帮助你实现惊艳视差滚动效果的jQuery插件
Sep 14 Javascript
window.location.href中url中数据量太大时的解决方法
Dec 23 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
Dec 31 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
May 11 Javascript
JavaScript中的数组操作介绍
Dec 30 Javascript
JS动态添加选项案例分析
Oct 17 Javascript
JS 使用 window对象的print方法实现分页打印功能
May 16 Javascript
解决Vue-cli npm run build生产环境打包,本地不能打开的问题
Sep 20 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
Nov 05 Javascript
jQuery封装的屏幕居中提示信息代码
Jun 08 #Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
Jun 07 #Javascript
JavaScript基础语法之js表达式
Jun 07 #Javascript
JavaScript必看小技巧(必看)
Jun 07 #Javascript
通过正则表达式获取url中参数的简单实现
Jun 07 #Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
Jun 07 #Javascript
javascript显示倒计时控制按钮的简单实现
Jun 07 #Javascript
You might like
如何对PHP程序中的常见漏洞进行攻击
2006/10/09 PHP
php while循环得到循环次数
2013/10/26 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
简略说明Javascript中的= =(等于)与= = =(全等于)区别
2013/04/16 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
JavaScript中0和""比较引发的问题
2016/05/26 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
JavaScript仿网易选项卡制作代码
2016/10/06 Javascript
Jquery EasyUI Datagrid右键菜单实现方法
2016/12/30 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
2017/12/20 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
npx create-react-app xxx创建项目报错的解决办法
2020/02/17 Javascript
js实现选项卡效果
2020/03/07 Javascript
react基本安装与测试示例
2020/04/27 Javascript
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
[03:07]2015国际邀请赛选手档案EHOME.rOtK 是什么让他落泪?
2015/07/31 DOTA
[00:52]DOTA2齐天大圣预告片
2016/08/13 DOTA
Python中的多重装饰器
2015/04/11 Python
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
python避免死锁方法实例分析
2015/06/04 Python
python去掉行尾的换行符方法
2017/01/04 Python
Python-ElasticSearch搜索查询的讲解
2019/02/25 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
2019/08/27 Python
浅谈python之自动化运维(Paramiko)
2020/01/31 Python
python 通过文件夹导入包的操作
2020/06/01 Python
python读取hdfs上的parquet文件方式
2020/06/06 Python
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
德国Discount-Apotheke中文官网:DC德式康线上药房
2020/02/18 全球购物
医药工作者的求职信范文
2013/09/21 职场文书
会计核算科岗位职责
2014/03/19 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
师范生见习报告
2014/10/31 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书