欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java?web項(xiàng)目Session獲取不到問(wèn)題及解決

 更新時(shí)間:2022年01月12日 14:33:49   作者:shiGuang°  
這篇文章主要介紹了java?web項(xiàng)目Session獲取不到問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

java web項(xiàng)目Session獲取不到

在servlet類(lèi)中對(duì)Session進(jìn)行了設(shè)置 但當(dāng)servlet跳轉(zhuǎn)到頁(yè)面時(shí) 頁(yè)面獲取不到Session?。。?/p>

關(guān)于session的生命周期

Session保存在服務(wù)器端。Session在用戶(hù)第一次訪(fǎng)問(wèn)服務(wù)器的時(shí)候自動(dòng)創(chuàng)建。需要注意只有訪(fǎng)問(wèn)JSP、Servlet等程序時(shí)才會(huì)創(chuàng)建Session,只訪(fǎng)問(wèn)HTML、IMAGE等靜態(tài)資源并不會(huì)創(chuàng)建Session。如果尚未生成Session,也可以使用request.getSession(true)強(qiáng)制生成Session。

而我們?cè)陧?yè)面獲取不到Seesion的原因可能是:瀏覽器禁用了Cookie

使用url地址重寫(xiě)即可解決!

  • response.encodeRedirectURL(url)用于對(duì)sendRedirect方法后的url地址進(jìn)行重寫(xiě)。
  • response.encodeURL(url)用于對(duì)表單action和超鏈接的url地址進(jìn)行重寫(xiě)
String url=response.encodeRedirectURL("url");
response.sendRedirect(url);

這樣在頁(yè)面中即可使用

<%=request.getSession().getAttribute("key")%>

來(lái)獲取我們存儲(chǔ)的Seesion?。?!

前后端分離獲取不到session問(wèn)題

前后端分離的項(xiàng)目,前端是vue,后端springboot,或者maven項(xiàng)目,生成驗(yàn)證碼的時(shí)候存了一份到session并存到redis里,前端調(diào)后臺(tái)注冊(cè)獲取不到session,但當(dāng)用戶(hù)從session中取信息的時(shí)候發(fā)現(xiàn)始終取不到,每次跨域請(qǐng)求時(shí)ajax發(fā)送的都是新的sessionid,導(dǎo)致無(wú)法獲取信息

解決方案

前端在vue的main文件全局添加一下代碼:

import axios from 'axios';
axios.defaults.withCredentials=true;

后臺(tái)新增一個(gè)過(guò)濾器

web.xml文件

<filter>
?? ?<filter-name>contextFilter</filter-name>
?? ?<filter-class>com.zl.filter.ContextFilter</filter-class>
</filter>
<filter-mapping>
?? ?<filter-name>contextFilter</filter-name>
?? ?<url-pattern>/*</url-pattern>
</filter-mapping>
public class ContextFilter implements Filter {
? ? @Override
? ? public void init(FilterConfig filterConfig) throws ServletException {
? ? }
? ? @Override
? ? public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
? ? ? ? HttpServletResponse response = (HttpServletResponse)servletResponse;
? ? ? ? HttpServletRequest request = (HttpServletRequest)servletRequest;
? ? ? ? String origin = request.getHeader("Origin");
? ? ? ? response.setHeader("Access-Control-Allow-Origin", origin);
? ? ? ? response.setHeader("Access-Control-Allow-Methods", "*");
? ? ? ? String headers = request.getHeader("Access-Control-Request-Headers");
? ? ? ? ?// 支持所有自定義頭
? ? ? ? if (!org.springframework.util.StringUtils.isEmpty(headers)) {
? ? ? ? ? ? response.setHeader("Access-Control-Allow-Headers", headers);
? ? ? ? }
? ? ? ? response.setHeader("Access-Control-Allow-Credentials", "true");
? ? ? ? response.setHeader("Access-Control-Max-Age", "3600");
? ? ? ? filterChain.doFilter(request, response);
? ? }
? ? @Override
? ? public void destroy() {
? ? }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論