java?web項(xiàng)目Session獲取不到問題及解決
java web項(xiàng)目Session獲取不到
在servlet類中對Session進(jìn)行了設(shè)置 但當(dāng)servlet跳轉(zhuǎn)到頁面時(shí) 頁面獲取不到Session?。?!
關(guān)于session的生命周期
Session保存在服務(wù)器端。Session在用戶第一次訪問服務(wù)器的時(shí)候自動創(chuàng)建。需要注意只有訪問JSP、Servlet等程序時(shí)才會創(chuàng)建Session,只訪問HTML、IMAGE等靜態(tài)資源并不會創(chuàng)建Session。如果尚未生成Session,也可以使用request.getSession(true)強(qiáng)制生成Session。
而我們在頁面獲取不到Seesion的原因可能是:瀏覽器禁用了Cookie
使用url地址重寫即可解決!
response.encodeRedirectURL(url)
用于對sendRedirect方法后的url地址進(jìn)行重寫。response.encodeURL(url)
用于對表單action和超鏈接的url地址進(jìn)行重寫
String url=response.encodeRedirectURL("url"); response.sendRedirect(url);
這樣在頁面中即可使用
<%=request.getSession().getAttribute("key")%>
來獲取我們存儲的Seesion!??!
前后端分離獲取不到session問題
前后端分離的項(xiàng)目,前端是vue,后端springboot,或者maven項(xiàng)目,生成驗(yàn)證碼的時(shí)候存了一份到session并存到redis里,前端調(diào)后臺注冊獲取不到session,但當(dāng)用戶從session中取信息的時(shí)候發(fā)現(xiàn)始終取不到,每次跨域請求時(shí)ajax發(fā)送的都是新的sessionid,導(dǎo)致無法獲取信息
解決方案
前端在vue的main文件全局添加一下代碼:
import axios from 'axios'; axios.defaults.withCredentials=true;
后臺新增一個過濾器
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() { ? ? } }
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot2之PUT請求接收不了參數(shù)的解決方案
這篇文章主要介紹了SpringBoot2之PUT請求接收不了參數(shù)的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07Vue3源碼解讀effectScope API及實(shí)現(xiàn)原理
這篇文章主要為大家介紹了Vue3源碼解讀effectScope API及實(shí)現(xiàn)原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Spring MVC 更靈活的控制 json 返回問題(自定義過濾字段)
本篇文章主要介紹了Spring MVC 更靈活的控制 json 返回問題(自定義過濾字段),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02Java語言的11大特點(diǎn)(Java初學(xué)者必知)
Java是一種簡單的,面向?qū)ο蟮?,分布式的,解釋型的,健壯安全的,結(jié)構(gòu)中立的,可移植的,性能優(yōu)異、多線程的靜態(tài)語言。這篇文章主要介紹了Java語言的11大特點(diǎn),需要的朋友可以參考下2020-07-07基于Jenkins自動打包并部署docker環(huán)境的操作過程
這篇文章主要介紹了基于Jenkins自動打包并部署docker環(huán)境,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08SpringBoot實(shí)現(xiàn)定時(shí)任務(wù)和異步調(diào)用
這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)定時(shí)任務(wù)和異步調(diào)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04