Cannot create a session after the response has been committed

原创 创建时间:2018-10-26 访问量:122 赞:0 踩:0

情形一:

正如网上其他猿友们说的,之所以会出现此类问题是因为我们在Response输出响应后才创建Session的。

(因为那时候服务器已经将数据发送到客户端了,即:就无法发送Session ID 了)

ServletOutputStream out = response.getOutputStream(); 

out.print();

out.close();

Session session = request.getSession()

将session的创建放到response.getOutputStream()前面即可。

情形二:

但有时候,问题并不这么明显,尤其是在使用Spring 框架的拦截器时。

情形复现:

如果在SpringMVC Controller方法中已经使用了return jsonobject,将json对象写入response中了,但在框架中又使用了一个response拦截器时,并在拦截器中使用了request.getSession()方法时,就会发生这种情形。这种情况一般情况下还不容易不出,只有在单独访问这个Controller方法时,并且之前还没有调用request.getSession()方法,才会出现这种情形。

总之:

如果问题如情形一这么明显,那就很多处理。如果如情形二这样的话,就要查看框架中所有相关的拦截器中的代码,并找出在response过程中拦截的方法,与创建session的代码。把这段代码用try...catch一下,不要抛出来即可。

如果有全局异处理,并将异常信息以json的形式返回的话,这个json数据就会附加在之前的json数据之后,很有可能导致前端解析json数据失败。

祝您好运!

[太开心][挤眼][可爱]


评论
 我想说:
==已经到底了==
关注: 粉丝: 积分:
工联信息网
如有问题请致邮箱:need@glxxw2018.com(仅限本站无法查询到的资料);本站能够查询到的资料请关注“工联信息网”公众号,通过页面提供的资源码查询!
不良信息反馈及侵权投诉建议请致邮箱:accusation@glxxw2018.com