在nodejs下不太好直接获取到request里面的cookie,需要安装cookie-parser插件来获取
安装:
npm install cookie-parser --save
使用:
const express = require('express')
const app = express();
const cookieParser = require('cookie-parser');
app.use(cookieParser());
当我们使用了cookieParser之后,就能直接在request中取出cookie了
具体实现:
app.get('/views', (req, res) => {
console.log(req.cookies);
res.send("测试")
})
**注意:**如果前端是通过接口调用,记得在配置ajax时设置允许携带接口访问
jQuery设置:
$.ajax({
url: "http://localhost:3010/login/userLogin",
type: "POST",
dataType: "json",
data: JSON.stringify(formData),
xhrFields: {
withCredentials: true //允许跨域带Cookie
},
headers:{
Accept: "application/json" ,
"Content-Type" : "application/json"
},
success: function(result){
console.log('success')
}
});
axios设置:
import axios from "axios";
axios.defaults.withCredentials = true; // 允许请求的时候带上cookie
设置cookie不需要插件也可进行,但是如果是通过接口调用,不仅前端需设置允许携带cookie,也要在后端配置允许跨域
例如:
// 如果前端允许传递cookie,加上这一句
res.header("Access-Control-Allow-Credentials", "true");
语法:
res.cookie(key, value, options)
key:cookie名称
value:cookie的值
options:其他配置项(对象形式)可选
具体代码:
const express = require('express')
const app = express();
app.get('/login', (req, res) => {
res.cookie("token", "123456789");
res.send('登录')
})
/*
* 在默认域名下设置的cookie(项目所监听的域名,本地则默认是localhost),在localhost下的所有路由可以访问到
* */
res.cookie("token", "123456789");
实现结果:
我们切换一下端口号和路径:
即使没有这个网页,cookie依然被设置:
在options中配置maxAge属性即可,值为数字,以毫秒为单位
res.cookie("token", "123456789", {maxAge: 600000});
设置的时间是国际标准时间:2020-12-17 08:06:24
加上8小时即是北京时间:2020-12-17 16:06:24
刚好比我当前时间多10分钟
domain可以设置域名:类似 csdn.net,也可以设置IP地址:类似 127.0.0.1。
res.cookie("token", "123456789", {domain:'127.0.0.1',maxAge: 600000});
设置路径之后,只有当前域名下的对应路径才能获取到cookie
res.cookie("token", "123456789", {domain:'127.0.0.1',maxAge: 600000, path:'/views'});
如果cookie中设置了HttpOnly属性,那么通过js脚本将无法读取以及修改cookie信息,这样能有效的防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性。
res.cookie("token", "123456789", {domain:'localhost',maxAge: 600000, path:'/views', httpOnly: true});