nodejs 跨域設置cookie

在作vue全家桶+express 作項目。 想作一個免登錄功能,選擇session方案。 服務器設置session 後, 返回的響應頭有Set-Cookie,可是瀏覽器的Application的cookies缺沒有返回的sessionID的cookie。 折騰了好久,才意識到這是跨域形成了問題。前端是8080端口,後端是4000端口。 默認狀況下跨域請求瀏覽器不會攜帶憑證信息(cookie, ssl證實等),服務器設置的cookie也會被瀏覽器攔截前端

 

因此解決方案是vue

前端的ajax後者axios須要設置withCredentials爲true。個人是axios,這樣請求會攜帶上cookieios

 

同時後端使用cors中間件。 便可ajax

//須要安裝而且引入中間件cors
const cors = require('cors');

var corsOptions = {
  origin: 'http://localhost:8080',
  credentials: true,
  maxAge: '1728000'
  //這一項是爲了跨域專門設置的
}
app.use(cors(corsOptions))
//設置跨域

 

若是不用中間件,也能夠這樣,顯示的設置express

Access-Control-Allow-Credentials 爲true

注意origin不能是*號.。 這樣瀏覽器就不會攔截服務器設置的cookie了json

1 app.all('*', function(req, res, next) {
2     res.header("Access-Control-Allow-Origin", req.headers.origin); //須要顯示設置來源
3     res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
4     res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
5     res.header("Access-Control-Allow-Credentials",true); //帶cookies7     res.header("Content-Type", "application/json;charset=utf-8");
8     next();
9 });
相關文章
相關標籤/搜索