关于session作用域问题请教老师
老师说session作用域比request大,我有点疑问。
上节课在servletA中创建了一个session,通过request.getSession()创建,那么这个session本来是没有的对吧,因为第一次创建,所以会在当前reauest的请求头里的cookie保存一个sessionid,对不。
疑问是:
之后通过请求转发(意味着是同一个request)把请求转发给servletB,再通过request.getSession()得到同一个session。servletB的request.getSession()没有创建新session对吧,直接在同一个request里的cookie进行查找有没有sessionid,有就直接用,表示同一个session.对吧。
但如果使用响应重定向的话就是两个请求了。
那么servletA里通过request.getSession()得到的sessionid应该是servletA里的request请求头的cookie里的sessionid。
而servletB里通过request.getSession()得到的sessionid应该是servletB里的request请求头的cookie里的
sessionid。
那么session的作用域岂不是跟request相同,因为session跟request的请求头的cookie的session绑定?
正在回答
无论是重定向和转发都应该是一个session。除非调用销毁session的方法或者超过这个session的有效期才会销毁,否则无论是ServletA转发还是重定向到ServletB,获取的都是同一个session。
并且这个cookie 是浏览器端用来保存的数据的,并不是一个request请求就有一个cookie呦。
举个例子:
request的作用域是一次请求。
session的作业域就是从你登陆这个账户到退出这个账户。
servletContext的作用域就是整个服务的开启到关闭
同学可以做个试验,在ServletA中获取session,并在session中存入数据,并重定向到ServletB中,同学可以发现,ServletB中是可以取出之前存放的数据的。而存放在request中就不行。重定向后数据会丢失。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 1088 份
- 解答问题 10204 个
如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星