为啥获取session是用request获取呢

就爱穷开心 2020-11-03 06:37:02
请教大神们,servlet中request内置对象是封装了客户端发给服务端的请求数据,也是只能操作客户端提交过来的数据 但是session对象是在存在服务端的,为啥获取session是用request获取,而不是response呢,
...全文
14109 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
就爱穷开心 2020-11-12
  • 打赏
  • 举报
回复
引用 8 楼 rumlee的回复:
[quote=引用 5 楼 就爱穷开心 的回复:][quote=引用 4 楼 rumlee的回复:]session的实现机制是先生成一个sessionid,然后将数据放在服务端,将sessionid放到cookie中通过response发送给浏览器,浏览器下次来访问的时候,会在request的cookie中带上sessionid,然后通过sessionid在服务器的缓存中获取实际数据。所以获取sesssion依赖于request中带的sessionid,通过request去获取是最合理的设计方式。 当然如果httpserver硬要设计成通过response获取也不是不行,毕竟response和request就是一一对应的,只是那样逻辑就不太顺畅。
但我有个疑问,就是一开始浏览器是没有cookie的,也就没有所谓的session id,那么request一开始去获取seesion,浏览器就没有这个数据,也就获取不到了呀. [/quote] 第一次cookie中是没有sessionid的,所以当你第一次访问session的时候,就会生成一个sessionid,并通过response发送到客户端。[/quote] 谢谢你的解释,我明白了
就爱穷开心 2020-11-12
  • 打赏
  • 举报
回复
引用 10 楼 qq_16992475的回复:
[quote=引用 9 楼 qq_16992475的回复:]你肯定没有注意到request的getSession方法有个重载的方法,里面传入一个boolean类型的值,这个值决定要不要创建session,即使你调用的是不传布尔参数的那个getsession方法,你走进源码里面去看RequestFacade的getSession(),他里面还是调用了getSession(true),true表示如果没有那么就创建出这个session,并且servlet处理完成之后会将回执的sessionid写给客户端。如果你调用的是request.getSession(false),那就表示如果服务器没有找到session的话,那就算了,服务器不会帮你创建session。
也就是整体说起来就是tomcat默认会帮你创建session,除非你明确的告诉它,我不要你帮我创建session,传个false给它,它就知道了[/quote] 谢谢,我大概是明白啦
rumlee 2020-11-08
  • 打赏
  • 举报
回复
引用 5 楼 就爱穷开心 的回复:
[quote=引用 4 楼 rumlee的回复:]session的实现机制是先生成一个sessionid,然后将数据放在服务端,将sessionid放到cookie中通过response发送给浏览器,浏览器下次来访问的时候,会在request的cookie中带上sessionid,然后通过sessionid在服务器的缓存中获取实际数据。所以获取sesssion依赖于request中带的sessionid,通过request去获取是最合理的设计方式。 当然如果httpserver硬要设计成通过response获取也不是不行,毕竟response和request就是一一对应的,只是那样逻辑就不太顺畅。
但我有个疑问,就是一开始浏览器是没有cookie的,也就没有所谓的session id,那么request一开始去获取seesion,浏览器就没有这个数据,也就获取不到了呀. [/quote] 第一次cookie中是没有sessionid的,所以当你第一次访问session的时候,就会生成一个sessionid,并通过response发送到客户端。
就爱穷开心 2020-11-07
  • 打赏
  • 举报
回复
引用 3 楼 qybao的回复:
因为服务端虽然存session,但是不知道session和哪个客户端对应,所以必须客户端request的时候携带个session id,服务器端才能通过该id找到对应的session和客户端关联。所以服务器端单纯获得session没意义,因为不知道是哪个客户端的,只有从客户端来获取session才有意义。
那么一开始客户端没有携带session id那还怎么获取呢?客户端都没有相关数据那request还怎么请求呀
就爱穷开心 2020-11-07
  • 打赏
  • 举报
回复
引用 2 楼 qq_16992475的回复:
session是基于cookie的,,所以拿session必须有cookie。而tomcat是将cookie封装到了请求中的,所以要用request去拿。
但是一开始浏览器中也没有cookie的,而cookie也是由服务器端创建返回给浏览器的,那么一开始就请求获取session,服务器都没有返回给浏览器session id,那么session怎么能获取的到呢?
就爱穷开心 2020-11-07
  • 打赏
  • 举报
回复
引用 4 楼 rumlee的回复:
session的实现机制是先生成一个sessionid,然后将数据放在服务端,将sessionid放到cookie中通过response发送给浏览器,浏览器下次来访问的时候,会在request的cookie中带上sessionid,然后通过sessionid在服务器的缓存中获取实际数据。所以获取sesssion依赖于request中带的sessionid,通过request去获取是最合理的设计方式。 当然如果httpserver硬要设计成通过response获取也不是不行,毕竟response和request就是一一对应的,只是那样逻辑就不太顺畅。
但我有个疑问,就是一开始浏览器是没有cookie的,也就没有所谓的session id,那么request一开始去获取seesion,浏览器就没有这个数据,也就获取不到了呀.
hookee 2020-11-04
  • 打赏
  • 举报
回复
session id在cookie中
rumlee 2020-11-04
  • 打赏
  • 举报
回复 1
session的实现机制是先生成一个sessionid,然后将数据放在服务端,将sessionid放到cookie中通过response发送给浏览器,浏览器下次来访问的时候,会在request的cookie中带上sessionid,然后通过sessionid在服务器的缓存中获取实际数据。所以获取sesssion依赖于request中带的sessionid,通过request去获取是最合理的设计方式。 当然如果httpserver硬要设计成通过response获取也不是不行,毕竟response和request就是一一对应的,只是那样逻辑就不太顺畅。
qybao 2020-11-04
  • 打赏
  • 举报
回复
因为服务端虽然存session,但是不知道session和哪个客户端对应,所以必须客户端request的时候携带个session id,服务器端才能通过该id找到对应的session和客户端关联。所以服务器端单纯获得session没意义,因为不知道是哪个客户端的,只有从客户端来获取session才有意义。

24,923

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Apache
社区管理员
  • Apache
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧