java?web項目Session獲取不到問題及解決
java web項目Session獲取不到
在servlet類中對Session進行了設(shè)置 但當(dāng)servlet跳轉(zhuǎn)到頁面時 頁面獲取不到Session!!!
關(guān)于session的生命周期
Session保存在服務(wù)器端。Session在用戶第一次訪問服務(wù)器的時候自動創(chuàng)建。需要注意只有訪問JSP、Servlet等程序時才會創(chuàng)建Session,只訪問HTML、IMAGE等靜態(tài)資源并不會創(chuàng)建Session。如果尚未生成Session,也可以使用request.getSession(true)強制生成Session。
而我們在頁面獲取不到Seesion的原因可能是:瀏覽器禁用了Cookie
使用url地址重寫即可解決!
response.encodeRedirectURL(url)用于對sendRedirect方法后的url地址進行重寫。response.encodeURL(url)用于對表單action和超鏈接的url地址進行重寫
String url=response.encodeRedirectURL("url");
response.sendRedirect(url);這樣在頁面中即可使用
<%=request.getSession().getAttribute("key")%>來獲取我們存儲的Seesion?。?!
前后端分離獲取不到session問題
前后端分離的項目,前端是vue,后端springboot,或者maven項目,生成驗證碼的時候存了一份到session并存到redis里,前端調(diào)后臺注冊獲取不到session,但當(dāng)用戶從session中取信息的時候發(fā)現(xiàn)始終取不到,每次跨域請求時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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java控制臺實現(xiàn)學(xué)生信息管理系統(tǒng)(集合版)
這篇文章主要為大家詳細(xì)介紹了java控制臺實現(xiàn)學(xué)生信息管理系統(tǒng)的集合版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-04-04
如何解決@value獲取不到y(tǒng)aml數(shù)組的問題
文章介紹了在使用YAML配置文件時,通過@Value注解獲取整數(shù)和數(shù)組列表的配置方法,并提供了兩種解決方案:一種適用于非嵌套列表,另一種適用于嵌套列表等復(fù)雜配置2024-11-11
SpringBoot工程搭建打包、啟動jar包和war包的教程圖文詳解
這篇文章主要介紹了SpringBoot工程搭建打包、啟動jar包和war包的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
Spring Boot + Mybatis 實現(xiàn)動態(tài)數(shù)據(jù)源案例分析
這篇文章主要介紹了Spring Boot + Mybatis 實現(xiàn)動態(tài)數(shù)據(jù)源,需要的朋友可以參考下2018-11-11
Java數(shù)據(jù)結(jié)構(gòu)之圖的兩種搜索算法詳解
在很多情況下,我們需要遍歷圖,得到圖的一些性質(zhì)。有關(guān)圖的搜索,最經(jīng)典的算法有深度優(yōu)先搜索和廣度優(yōu)先搜索,接下來我們分別講解這兩種搜索算法,需要的可以參考一下2022-11-11

