一、cookie

cookie是一门客户端的技术,因为cookie是存储在客户端浏览器中的。由于http协议是无状态的.传统服务器只能被动响应请求.当服务器获取到请求,并为了能够区分每一个客户端,需要客户端发送请求时发送一个标志符(cookie)。

前端设置:

1、需要设置允许跨域携带凭证

axios请求的get请求和post请求不一样,但是凭证是一样的

axios.post(url,dataObj,{withCredentials: true })
axios.get(url,{params:dataObj, withCredentials: true })

2、设置cookie对象里面的值

maxAge: 设置cookie的有效期,单位毫秒,默认浏览器关闭消失;

httpOnly:设置cookie是否允许js访问,默认true,不允许;

overwrite:如果设置为true,相同的键值对会被覆盖,否则发送两个;

signed:如果为true表示对cookie进行签名,不是加密,只是防止被篡改,注意在获取的时候也要提供该设置进行匹配;

encrpty:是否加密,true加密后客户端看不到明文,只能在服务器端获取,注意在获取的时候也要提供该设置进行匹配;

3、案例:

 axios.get('http://127.0.0.1:7001/setcookie',{withCredentials: true//允许跨域携带凭证(cookie)}).then(function (response) {//请求完成并成功console.log(response);console.log(document.cookie);axios.get('http://127.0.0.1:7001/getcookie',{withCredentials: true}).then(function (response) {console.log(response);}).catch(function (error) {console.log(error);});}).catch(function (error) {console.log(error);});// 前端设置cookiedocument.cookie = `clientNum=111;max-age=${24*60*60};path=/`;

后端服务器设置

1、在config.default.js文件中需要配置

 config.cors = {// origin: '*', //允许的域,*代表所有的origin: 'http://127.0.0.1', //允许的域,*代表所有的allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH',//允许跨域的请求方法credentials: true//后端允许跨域携带cookie};

2、在写完cookie接口后在对应的controller里面的文件

 async setcookie() {const { ctx } = this;// 设置cookie: ctx.cookies.set(key,value)ctx.cookies.set('num1',100);ctx.cookies.set('num2',200);ctx.body = 'cookie设置成功';}

3、获取cookie(cookie接口后在对应的controller里面的文件)

async getcookie() {const { ctx } = this;// 获取cookie: ctx.cookies.get(key)let num1 = ctx.cookies.get('num1');let num2 = ctx.cookies.get('num2');ctx.body = {num1,num2};

删除cookie

清除cookie把值设置为null即可

或者是直接在浏览器里面去把cookie手动删除

注意:

(1)前端设置的cookie虽然会每次发起请求都会携带给后端服务器,但是后端服务器是拿不到的

(2)后端设置的cookie,虽然保存在客户端的浏览器里面,但是前端去获取,是拿不到的

(3)需要设置同源

二、session

后端在用session存储数据的时候,会创建一个cookie(EGG_SESS),这个cookie会自动保存在客户端浏览器里面,  用session存储数据的时候,会创建一个唯一的cookie(EGG_SESS),然后当后端要获取存储的session数据时,必须根据在存储session的时候创建的这个cookie值解析对应的session

前端设置:

1、需要设置允许跨域携带凭证

    axios.get('http://127.0.0.1:7001/setsession',{withCredentials: true//允许跨域携带凭证(cookie)})

后端设置:

1、允许后端携带凭证(在config.default.js文件中需要配置)

  config.cors = {// origin: '*', //允许的域,*代表所有的origin: 'http://127.0.0.1', //允许的域,*代表所有的allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH',//允许跨域的请求方法credentials: true//后端允许跨域携带cookie};

2、设置cookie值--在写完session接口后在对应的controller里面的文件

 async setsession() {const { ctx } = this;// 设置session:ctx.session.属性名 = 值;ctx.session.id = 101;ctx.session.account = '18965989898';ctx.body = 'session设置成功';}

3、获取session的值(写完session接口后在对应的controller里面的文件)

 async getsession() {const { ctx } = this;// 获取session:ctx.session.属性名let id = ctx.session.id;let account = ctx.session.account;ctx.body = {id,account};}

删除session

可以直接在浏览器里面去删,也可以在文件里面去设置

 class SessionController extends Controller {async deleteSession() {this.ctx.session = null;}
};

注意:

(1)后端 在用session的时候,存储数据时会创建一个cookie(EGG_SESS),这个cookie就会自动会保存在浏览器

(2)用session存储数据的时候,会创建唯一个cookie(EGG_SESS),然后当后端要session数据时,必须根据存储的session的时候根据cookie值解析出对应的session

(3)设置 session 属性时不要以 _ 开头,不能为 isNew

session比cookie的不同之处

1.存放位置不同,cookie存放在客户端,session存放在服务器。

2.cookie中的数据可以看得清楚,但是session下发的是乱码,并且服务器自己缓存一些东西,下次浏览器的请求带着乱码上来,此时与缓存进行比较,看看是谁。

3.cookie的存放量小 不能大于4k,session下放的是乱码,且存在服务器,所以存放量理论上无限大。

cookie session的设置相关推荐

  1. 熬夜彻底搞懂Cookie Session Token JWT

    一切的根源就是因为 HTTP 是一个无状态的协议. HTTP 是一个无状态的协议 什么是无状态呢?就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的. 看过电影<夏洛特烦恼&g ...

  2. 彻底理解cookie,session,localStorage(附代码)

    2019独角兽企业重金招聘Python工程师标准>>> 1. cookie 1.1 什么是cookie cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某 ...

  3. Cookie/Session机制详解--如何区分不同用户

    转载自:https://www.cnblogs.com/zhouhbing/p/4204132.ht 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是C ...

  4. django Cookie,Session和自定义分页

    因为HTTP协议是无状态的,每发送完请求后都会断开链接,所以有时为了保存 状态用到cookie和session cookie 是保存在浏览器上的,session是保存在后台的 cookie相当于一个口 ...

  5. [转]Cookie/Session机制详解

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  6. 2、cookie session token详解

    cookie session token详解 转自:http://www.cnblogs.com/moyand/ 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, ...

  7. 【Servlet】Request/Response/Cookie/Session中常用方法

    #1.Request package com.tcb.servlet;import java.io.IOException; import javax.servlet.ServletException ...

  8. 基于requests模块的cookie,session和线程池爬取

    基于requests模块的cookie,session和线程池爬取 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三"人人网"个人主页数据)时,如果使用之前req ...

  9. .net session 有效时间_Python中requests模拟登录的三种方式(携带cookie/session进行请求网站)...

    这篇文章主要介绍了python中requests模拟登录的三种方式(携带cookie/session进行请求网站),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋 ...

最新文章

  1. Redis 笔记(03)— string类型(设置key、获取key、设置过期时间、批量设置获取key、对key进行加减、对key值进行追加、获取value子串)
  2. 从全球最大光伏展看中国光伏行业:火爆的背后是什么?
  3. JFreeChart使用
  4. Java实现拼音转汉字
  5. 03 | 事务隔离:为什么你改了我还看不见
  6. 中石油训练赛 - Racing Gems(最长不下降子序列)
  7. No JVM could be found on your system解决方法
  8. python中和为k的个数_程序查找在python中总计为k的不同组合的数量
  9. linux备份文件命令tar.gz,Linux系统tar命令备份数据
  10. KafkaConsumer分析
  11. 基于JAVA+SpringMVC+Mybatis+MYSQL的粮店粮食库存管理系统
  12. hdu 4308 Saving Princess claire_ 广搜 多校联合赛第七题
  13. 2. mysql 基本命令
  14. 如何进阶一名有竞争力的程序员? 1
  15. 怎样做sns网站?哪里可下载这类程序?
  16. 数学建模优化模型简单例题_数学建模案例分析--最优化方法建模7习题六
  17. c语言词法分析器的实验报告,C语言词法分析器构造实验报告
  18. CSS CSS3 pdf 电子书大全 百度云
  19. VISIO同时选中多条线
  20. hive 计算周几_HIVE如何返回周or周几

热门文章

  1. Maven学习一:用Maven创建Java Project
  2. vue大文件分片上传插件
  3. 站在Z时代社交风口 融云打造语音聊天室新模式
  4. Linux运维遇见Device /dev/sdb excluded by a filter如何解决
  5. 计算机硬件的开发及应用,关于计算机硬件安装的课件开发
  6. 技术 KOL 龙神:永远挑战难度值增加 30% 的事情
  7. 【学习日记】手写数字识别及神经网络基本模型
  8. 形象标识 新松机器人_沈阳新松机器人面试体验贴!
  9. Robbery UVa-707
  10. iPad2越狱后如何安装常用软件