日期:2014-05-17  浏览次数:20695 次

struts2 关于session我纠结的问题
登录时把用户信息放到session中了,ActionContext.getContext().getSession().put("user", user1);
然后有一个控制权限的filter和一个文件上传的servlet,现在问题出现了。在filter用下面的方法取user能取到
HttpSession session = ((HttpServletRequest)req).getSession();
User user = (User)session.getAttribute("user");

但是在上传文件那个servlet里去user取到的是空,用的方法是
 HttpSession session = request.getSession();
User user = (User)session.getAttribute("user");

断点一步一步跟的,就是取不到。最后我在struts里登录的代码改了一下改成下面的
ActionContext.getContext().getSession().put("user", user1);
ServletActionContext.getRequest().getSession().setAttribute("user", user1);

断点跟了 还是取不到,但在filter里能取到啊,而且在servlet和filter中取到的session都不是一个值,我也试着getSession(false)了,但是这样就空指针了。。求助。。谁能告诉我why,据说csdn高手很多滴。。

------解决方案--------------------
HttpServletRequest ?
------解决方案--------------------
在你的filter里面,你有没有doChain()??所request和response继承往下转发?
------解决方案--------------------
引用:
最后我改成上传文件的表单,文件上传上去了,又悲剧了。
怎么回事?

原来是上传的问题。
------解决方案--------------------
跟上传可能会有关系的
比如有的带Flash的上传文件插件,浏览器会为Flash新开一个Session,新开的Session里自然就没有登录信息了。这种时候必须通过别的途径指明登录用户身份


------解决方案--------------------
引用:
然后我把上传文件的页面的表单改了一下 改成普通表单请求这个上传文件的servlet,也能取到 
最后我改成上传文件的表单,文件上传上去了,又悲剧了。

问题不就在这两个表单上吗。肯定哪里出问题了,并且是个不大引人注意的问题。
------解决方案--------------------
引用:
不是上传的问题 session和表单有关系吗?我想不通

楼主考虑下:
1 网页如果使用了iframe/frameset技术,session就容易出问题。
2 上传的时候,form的编码方式是不一样的,Server端解析的时候,很难说不出问题。
3 如果禁用了Cookie,则Session要靠URL重写来实现,如果同时又是上传,则更难说不出问题。

------解决方案--------------------
学习学习班