关于重定向之后session丢失的问题

今天在数据库取值存到list集合,在Servlet将list存到session里之后,重定向到项目下的另外一个页面,发现session里面的内容丢失。

测试:在Servlet中打印list,发现list的值都在,重定向之后,跳转的页面读取到session为Null, 于是确定是重定向引起的session丢失的问题。

在这里就要注意了,使用request.getSession()方法获取Session, 本方法是从当前request中获取session,如果获取不到session,则会自动创建一个session,并返回新创建的session;如果获取到,则返回获取到的session; 众所周知,请求转发会发送一次请求,而重定向发送两次。

使用response.sendRedirect("/hello.jsp");转到hello.jsp之后,request对象是新建的,你的request.getsession里面的属性值自然没有了。

暂时的解决方法有两种,亲测有效:

方法一:  将重定向改为请求转发request.getRequestDispatcher("stu_list.jsp").forward(request, response);

方法二 : 将session的ID存到Cookie中,并设置失效时间,重定向之后session依然可用

 

关于方法二的解释:
request只能存在于一次访问里,为了让每次访问区分开是哪个用户,所以request中会带上session的id标识,就是每个request都会属于一个session,一个session能为很多次request服务。类似于数据库的多对一关系
所以request.getSession的本质是使用request中的session id去找到这个用户对应的session

 

关于方法二的解释:
request只能存在于一次访问里,为了让每次访问区分开是哪个用户,所以request中会带上session的id标识,就是每个request都会属于一个session,一个session能为很多次request服务。类似于数据库的多对一关系
所以request.getSession的本质是使用request中的session id去找到这个用户对应的session

猜你喜欢

转载自www.cnblogs.com/ltfxy/p/10203042.html