cookie session的设置
一、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的设置相关推荐
- 熬夜彻底搞懂Cookie Session Token JWT
一切的根源就是因为 HTTP 是一个无状态的协议. HTTP 是一个无状态的协议 什么是无状态呢?就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的. 看过电影<夏洛特烦恼&g ...
- 彻底理解cookie,session,localStorage(附代码)
2019独角兽企业重金招聘Python工程师标准>>> 1. cookie 1.1 什么是cookie cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某 ...
- Cookie/Session机制详解--如何区分不同用户
转载自:https://www.cnblogs.com/zhouhbing/p/4204132.ht 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是C ...
- django Cookie,Session和自定义分页
因为HTTP协议是无状态的,每发送完请求后都会断开链接,所以有时为了保存 状态用到cookie和session cookie 是保存在浏览器上的,session是保存在后台的 cookie相当于一个口 ...
- [转]Cookie/Session机制详解
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- 2、cookie session token详解
cookie session token详解 转自:http://www.cnblogs.com/moyand/ 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, ...
- 【Servlet】Request/Response/Cookie/Session中常用方法
#1.Request package com.tcb.servlet;import java.io.IOException; import javax.servlet.ServletException ...
- 基于requests模块的cookie,session和线程池爬取
基于requests模块的cookie,session和线程池爬取 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三"人人网"个人主页数据)时,如果使用之前req ...
- .net session 有效时间_Python中requests模拟登录的三种方式(携带cookie/session进行请求网站)...
这篇文章主要介绍了python中requests模拟登录的三种方式(携带cookie/session进行请求网站),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋 ...
最新文章
- Redis 笔记(03)— string类型(设置key、获取key、设置过期时间、批量设置获取key、对key进行加减、对key值进行追加、获取value子串)
- 从全球最大光伏展看中国光伏行业:火爆的背后是什么?
- JFreeChart使用
- Java实现拼音转汉字
- 03 | 事务隔离:为什么你改了我还看不见
- 中石油训练赛 - Racing Gems(最长不下降子序列)
- No JVM could be found on your system解决方法
- python中和为k的个数_程序查找在python中总计为k的不同组合的数量
- linux备份文件命令tar.gz,Linux系统tar命令备份数据
- KafkaConsumer分析
- 基于JAVA+SpringMVC+Mybatis+MYSQL的粮店粮食库存管理系统
- hdu 4308 Saving Princess claire_ 广搜 多校联合赛第七题
- 2. mysql 基本命令
- 如何进阶一名有竞争力的程序员? 1
- 怎样做sns网站?哪里可下载这类程序?
- 数学建模优化模型简单例题_数学建模案例分析--最优化方法建模7习题六
- c语言词法分析器的实验报告,C语言词法分析器构造实验报告
- CSS CSS3 pdf 电子书大全 百度云
- VISIO同时选中多条线
- hive 计算周几_HIVE如何返回周or周几