概述
一、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);
});
// 前端设置cookie
document.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 二、sessionsession比cookie的不同之处的全部内容,希望文章能够帮你解决cookie session的设置一、cookie 二、sessionsession比cookie的不同之处所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复