【踩坑】spring每次請求后session不一樣導致無法在服務器保存信息


根據網上的資料,若想在服務器用session保存一些信息,方法如下:

    public Xclass Xmethod(HttpServletRequest request, HttpSession session, Params parameterName){
            session.setAttribute("keyName", parameterName);
        }
    }

這樣,想獲取keyName鍵的值,可以使用語句:

public void Ymethod(HttpServletRequest request, HttpSession session) {
    String keyValue = (String) session.getAttribute("keyName");
    // do somethong  
}

但是使用ajax獲取數據進行測試,keyValue總是null。

 原因:

每次請求服務器所對應的session不一樣,導致session.setAttribute()方法保存的信息保存在不同的session中。

解決方法:

1. 后台

在控制器前使用@CrossOrigin注解,設置allowCredentials屬性為true,即:

@CrossOrigin(allowCredentials="true") 
@RestController
@RequestMapping("/xxx")
public class xxxController {
    ******
}

2. 前端

ajax請求中,加入 xhrFields:{withCredentials:true} , 即:

$.ajax({
    type: get,
    url: "http://localhost"
    data: {
        data1: "whatever"
    },
    dataType: "json",
    ***
    xhrFields:{
        withCredentials:true
    },
    ***
    success: function(data){
        // do something
    }
});

然后同一瀏覽器發出ajax在后台就能使用同一session,從而共享相同的信息了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM