在作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 });