-
2018-10-19 11:33:14
先来说说遇到的问题,在java中写了两个方法,暂且称之为A方法,B方法。 A方法中往session中存session.setAttribute("phoneMa",ma);在A方法中是可以取到phoneMa=session.getAttribute("phoneMa")的值,但是在B方法中获取phoneMa的值 phoneMa= session.getAttribute("phoneMa")一直为null。 百思不得解,然后查看两个方法中的sessionId=session.getId()是否一致,发现真的不一致。 这样,就找到了问题的所在。找资料发现:因为跨域问题SSIONID每次请求都会变化。而我的后台也设置了跨域请求
我的跨域源码是:
public class CORSFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletResponse httpResponse = (HttpServletResponse) servletResponse; //*表示允许所有域名跨域 httpResponse.addHeader("Access-Control-Allow-Origin", "*"); //允许的请求头类型 httpResponse.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); //允许跨域的Http方法 httpResponse.addHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE"); filterChain.doFilter(servletRequest, servletResponse); } public void destroy() { } }
doFilter代码修改之后:
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletResponse httpResponse = (HttpServletResponse) servletResponse; //*表示允许所有域名跨域 httpResponse.addHeader("Access-Control-Allow-Origin", "http://127.0.0.1:8020"); httpResponse.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); //允许跨域的Http方法 httpResponse.addHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE"); httpResponse.addHeader("Access-Control-Max-Age", "0"); httpResponse.addHeader("Access-Control-Allow-Credentials","true"); httpResponse.addHeader("XDomainRequestAllowed","1"); filterChain.doFilter(servletRequest, servletResponse); }
此时还不算完,需要在前端ajax请求上也要加入响应的代码。
xhrFields: { withCredentials: true }, crossDomain: true,
我的ajax请求是这样的:
$.ajax({ type: "post", url: IP + "member/sendCode", //加上这句话 xhrFields: { withCredentials: true }, crossDomain: true, data:{ phone:inphone }, success: function(data) { console.log(JSON.stringify(data)); if(data.code == 200){ } } });
这样再测试的时候,sessionId值是一样的,也能获取session的值了。
此文只作为笔记记录,可能会与其他大神写的内容雷同。 不喜勿喷!更多相关内容 -
谷歌浏览器存不上sessionid问题 登录时一直提示验证码错误 / 参数为空
2020-11-17 15:57:49场景:登录时一直提示验证码错误 / 参数为空或者不合法。经查询后,发现是Chrome浏览器cookie中无sessionid(没存上)。 解决办法: 谷歌浏览器地址栏输入:chrome://flags/,将 SameSite by default cookies、...场景:登录时一直提示验证码错误 / 参数为空或者不合法。经查询后,发现是Chrome浏览器cookie中无sessionid(没存上)。
- 解决办法:
谷歌浏览器地址栏输入:chrome://flags/,将 SameSite by default cookies、Cookies without SameSite must be secure两个选项设置为Disable
-
本地项目登录时一直提示验证码错误 / 参数为空(即浏览器存不上sessionid)问题
2020-08-29 15:40:37场景:早上上班起本地之后,登录时一直提示验证码错误 / 参数为空或者不合法(另一个相同登录原理的项目)。 并且只有我mac 版的Chrome浏览器有问题,Safari都可以正常登录。另一台台式机的Windows的Chrome也可以...场景:早上上班起本地之后,登录时一直提示验证码错误 / 参数为空或者不合法(另一个相同登录原理的项目)。
并且只有我mac 版的Chrome浏览器有问题,Safari都可以正常登录。另一台台式机的Windows的Chrome也可以(可能只是单纯的浏览器问题,跟系统无关)
经查询后,发现是Chrome浏览器cookie中无sessionid(没存上)。
- 解决办法:
谷歌浏览器地址栏输入:chrome://flags/,将 SameSite by default cookies、Cookies without SameSite must be secure两个选项设置为Disable
-
关于Ajax跨域访问 session不能保存或之后无法访问session取值为空等问题
2017-09-27 00:27:35根据浏览器的保护规则,跨域的时候我们创建的sessionId是不会被浏览器保存下来的,这样,当我们在进行跨域访问的时候,我们的sessionId就不会被保存下来,也就是说,每一次的请求,服务器就会以为是一个新的人,而...根据浏览器的保护规则,跨域的时候我们创建的sessionId是不会被浏览器保存下来的,这样,当我们在进行跨域访问的时候,我们的sessionId就不会被保存下来,也就是说,每一次的请求,服务器就会以为是一个新的人,而不是同一个人,为了解决这样的办法,下面这种方法可以解决这种跨域的办法。
在ajax 请求要加配置
$.ajax({ url:url, //加上 xhrFields及crossDomain xhrFields: { //允许带上凭据 withCredentials: true }, crossDomain: true, //以上 success:function(result){ alert("test"); }, error:function(){ } });
关于 withCredentials
withCredentials:
默认情况下,跨源请求不提供凭据(cookie、HTTP认证及客户端SSL证明等)。通过将withCredentials属性设置为true,可以指定某个请求应该发送凭据。如果服务器接收带凭据的请求,会用下面的HTTP头部来响应。“Access-Control-Allow-Credentials: true”
如果发送的是带凭据的请求,但服务器的相应中没有包含上面这个头部,那么浏览器就不会把相应交给JavaScript(于是,responseText中将是空字符串,status的值为0,而且会调用onerror()事件处理程序)。另外,服务器还可以在Preflight响应中发送这个HTTP头部,表示允许源发送带凭据的请求。
支持withCredentials属性的浏览器有Firefox 3.5+、Safari 4+和Chrome。IE10及更早版本都不支持。
同时注意
在添加基本的允许跨域响应头之后
需要添加 Access-Allow-Credentials:true
另外由于谷歌的安全策略
当withCredentials 为 true 时
ResponseHeader中的 Access-Allow-Origin 不能使用通配符 ‘*’
否则会提示A wildcard ‘*’ cannot be used in the ‘Access-Control-Allow-Origin’ header when the credentials flag is true. Origin ‘http://url’ is therefore not allowed access.
其他浏览器待测试
如果我的文章有帮上什么忙并且您也愿意赏个脸 就扫码领个红包吧(~ ̄▽ ̄)~
-
Java 后台设置session成功,获取为空
2020-04-24 16:21:54Java 后台设置session成功,获取为空 cookie secure 当服务器使用https时,容易出现漏洞SSL cookie without secure flag set,敏感cookie这时就需要打开cookie secure,服务器端设置cookie的时候,可以指定 secure ... -
ajax跨域访问Java后台获取sessionid不一致问题
2019-01-19 14:27:45前言: 在开发过程中遇到这么一个问题,让我花了一个下午的大好时光才解决。但是解决玩之后,发现那么的容易。就是查找资料的时候很费劲。...在验证码接口中我用session保存验证码,在登录接口中我从session取出... -
上下两个Session的SessionID 不一样怎么办
2019-05-17 15:23:50在昨天我在写代码的过程中出现了一个BUG,是以为上下的SessionID不一致,导致我不能精准地获取到我上面存在Session。 这个BUG我找了好久都没找出来,后来在老师的帮助下解决了这个问题。 原因: 上面的的... -
框架中session为空的解决办法
2008-07-20 11:57:00公司要给一个老的的asp网站加一些功能,开始我不知道是asp的网站用...加密又懒了的搞,只好让用户登录两次了,可是发现asp.net的页面登录后session取不到,不在框架中是正常的,查了很久,发现了原因: 【Iframe丢 -
获取sessionID的步骤
2020-08-15 10:22:42String str = String.valueOf(value); 支付串判断为null的方法,要加双引号 " " String str = String.valueOf(value); `在这里插入代码片` if ...StringUtils.isNotBlank(str)是判断为空和为NULL的方法 在这里 -
sessionId在每次request请求时变化的问题处理
2020-12-30 10:05:43前言 ...而这个机制就是Session...我们在开发过程中,因需要验证登录时使用的验证码,会在服务端生成一个SessionId与当时请求得到的验证码,放到redis上,再把SessionId返回存放到客户端上,作为该用户的一个凭证。... -
axios请求中session为空问题
2019-10-21 21:16:51vue的axios请求,获取到的服务端session为空 验证码保存在session中,但是存在跨域请求,session不一致问题(这个问题困扰了一天) 起因:http是无状态的,因此我们通常需要用到cookie以及session来保存状态,... -
前后端分离后产生的跨域问题sessionid丢失,cookies无法写入等
2020-06-09 15:36:42浏览器访问服务器,就如同打电话,浏览器A给服务器发送请求,访问web程序,该次会话就开始,其中不管浏览器发送了多少请求 ,都为一次会话,直到浏览器关闭,本次会话结束。 2.cookies如何保持会话,它的工作流程?... -
跨域访问sessionid不一致问题
2017-07-02 19:09:54在开发过程中遇到这么一个问题,让我花了一个下午的大好时光才解决。但是解决玩之后,发现那么的容易。就是查找资料的时候很费劲。...在验证码接口中我用session保存验证码,在登录接口中我从session取出验证码进行校验 -
微信小程序wx.request() session 值为空
2018-08-05 23:07:36问题:微信小程序wx.request() session 值为空 在微信小程序开发中,由wx.request()发起的每次请求对于服务端来说都是不同的一次会话,微信小程序不会把session信息带回服务端,即对应服务端不同的session,由于... -
SESSION刷新页面后值变为空,获取不到SESSION值的问题
2018-08-03 14:43:542.要是想几个页面共同使用一个session,那么这几个页面必须有一个关联文件,才能够获取到同一个session_id,这样才能定到唯一的那个session上面,所以在项目中,最好把所有的公共配置写在一php文件内,比如数据库... -
Session为空的一种原因
2013-06-26 15:46:23在维护一份比较老的代码,想改为ajax调用,然后就添加了一个一般处理程序文件,也就是以.ashx结尾的文件,一切都正常,但发现session一直为空,很奇怪 基本的代码如下: public class ... -
JavaWeb - Cookie、Session、SessionId 详解
2018-10-16 11:28:55一、概述 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。...本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session。 二、Cookie 1.1 Cook... -
判断用户登录的session是否存在.doc
2021-03-09 07:07:41// 对LoginAction不做该项拦截 if (action instanceof LoginAction) { System.out.println("exit check login, because this is login action."); return actionInvocation.invoke(); } // 确认Session中是否存在... -
Java 利用 SWFUpload多文件上传 session 为空失效,不能验证的问题
2015-09-09 12:25:26原文转自:http://www.tqcto.com/article/code/295299.html我们都知道普通的文件上传是通过表单进行文件上传的,还不能达到异步上传的目的。通过使用某些技术手段,比如jquery form.js可以达到异步上传的目的,但最... -
thinkphp6不能设置session以及模板无法获取session的坑附解决办法
2020-12-23 04:07:59把系统升级成了6.0发现了之前设置session没有问题,然后再6.0下面就不能使用了经过仔细研究终于找到了原因1.第一中间件全局必须是开启session 就是在你的app应用目录下面的middleware 里面 ... -
asp.net中通过代码来重置sessionid
2018-05-27 11:16:25可能很多人认为,在不重启浏览器的情况下sessionid是不会改变的,其实可以通过代码来重置sessionid,分享一下~~吼吼:ASP.NET 会话状态是一种允许您存储服务器端、特定于用户的数据的技术。Web 应用程序可以使用这些... -
session失效的原因以及从session中取到的对象为null
2020-02-14 15:12:05从debug图片上也能看到maxInactiveInterval过期时间设置为1800秒,不可能是过期的原因,过期后sessionId也就不可能相同;当在网上参考了一篇关于session失效的帖子 我有点感觉了,之前我设置过做过session的钝化和... -
前后端分离中的session为null的问题最全解决方法
2021-07-13 14:24:32今天上午将一个数据存在一个方法中,再调用另外一个接口取出session中的值时,后端直接给我输出了一个空值:null。...session你可以理解为就是一个小型数据库(有点牵强),它可以存放用户存入的键值对的 -
解决SpringCloud+gateway的session不一致问题。
2022-01-10 16:38:15springcloud微服务集群session不一致问题。使用spring-session和redis解决springcloud的session不一致问题。 -
自定义过滤器 filter取不到session,取值为null
2020-05-09 11:41:33明明设置了session,就只有在filter中取不到,就很邪门。 查了很久解决办法,都没效果,知道我看到了这个兄弟写的: https://blog.csdn.net/a1029573879a/article/details/79105802 我抱着试试看的心态去查看了一下... -
sessionID与cookie
2016-06-11 11:14:54一、cookie机制和session机制的区别 ************************************************************************************* 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在... -
springboot整合shiro无法获取当前用户/session中值为null
2021-03-05 19:27:03if (StringUtils.isEmpty(username)) { throw new AccountException("用户名不能为空"); } if (StringUtils.isEmpty(password)) { throw new AccountException("密码不能为空"); } UserExample userExample = new ... -
postman获取不到session得值
2020-06-04 19:53:51问题:postman获取不到session得值导致request.getSession().getAttribute(“xxx”)为空 解决方式 第一步:登陆后F12,打开application打开cookie,记得要刷新 第二步:把JSESSIONID得值复制到postman, 第三步:... -
记一次session获取为空的异常处理
2019-09-14 18:27:26原本服务器端是单机tomcat运行,接口端获取请求响应的cookie中的jsessionid值作为以后请求的cookie,这样就可以使用session了 将服务器端升级成分布式的,使用hazelcast做缓存并保存session,这时候接口端请求获取...