起因:http是無狀態的,因此我們通常需要用到cookie以及session來保存狀態,session是在服務器端存儲的,會和cookie一起使用,設置了session之后,會發送給瀏覽器一個cookie,這個cookie是session_id,當再次請求的時候瀏覽器會將它發送給服務器,以此來找到對應的session.
但是,我們實際使用的時候通常會用到跨域,就是向不同的域發起請求,但是默認情況下此時cookie是不會發送給服務器的,此時就導致了丟失session_id,從而導致了session的值為undefined。解決方案如下:
首先,前端頁面發起ajax請求時,加上參數:
withCredentials: true,
像這樣
$.ajax({ type: url:'http://localhost:8080/user-login', data: dataType:'JSON',//注意哦,這一句要記得加上哦,我就是因為沒加這句還查了好久的 withCredentials: true, success: error: })
我使用的后台語言是node.js,在node.js中使用cors跨域
在app.js中加上(注意接口的順序哦):
app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin", "這里填可以跨域訪問的域,不能填*哦"); res.header("Access-Control-Allow-Headers", "X-Requested-With"); res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS"); res.header("X-Powered-By",' 3.2.1'); res.header("Access-Control-Allow-Credentials",true); res.header("Content-Type", "application/json;charset=utf-8"); next(); });
ok,和bug一站到底,加油