[quote=引用 5 楼 就爱穷开心 的回复:][quote=引用 4 楼 rumlee的回复:]session的实现机制是先生成一个sessionid,然后将数据放在服务端,将sessionid放到cookie中通过response发送给浏览器,浏览器下次来访问的时候,会在request的cookie中带上sessionid,然后通过sessionid在服务器的缓存中获取实际数据。所以获取sesssion依赖于request中带的sessionid,通过request去获取是最合理的设计方式。 当然如果httpserver硬要设计成通过response获取也不是不行,毕竟response和request就是一一对应的,只是那样逻辑就不太顺畅。
[quote=引用 9 楼 qq_16992475的回复:]你肯定没有注意到request的getSession方法有个重载的方法,里面传入一个boolean类型的值,这个值决定要不要创建session,即使你调用的是不传布尔参数的那个getsession方法,你走进源码里面去看RequestFacade的getSession(),他里面还是调用了getSession(true),true表示如果没有那么就创建出这个session,并且servlet处理完成之后会将回执的sessionid写给客户端。如果你调用的是request.getSession(false),那就表示如果服务器没有找到session的话,那就算了,服务器不会帮你创建session。
[quote=引用 4 楼 rumlee的回复:]session的实现机制是先生成一个sessionid,然后将数据放在服务端,将sessionid放到cookie中通过response发送给浏览器,浏览器下次来访问的时候,会在request的cookie中带上sessionid,然后通过sessionid在服务器的缓存中获取实际数据。所以获取sesssion依赖于request中带的sessionid,通过request去获取是最合理的设计方式。 当然如果httpserver硬要设计成通过response获取也不是不行,毕竟response和request就是一一对应的,只是那样逻辑就不太顺畅。
因为服务端虽然存session,但是不知道session和哪个客户端对应,所以必须客户端request的时候携带个session id,服务器端才能通过该id找到对应的session和客户端关联。所以服务器端单纯获得session没意义,因为不知道是哪个客户端的,只有从客户端来获取session才有意义。
session是基于cookie的,,所以拿session必须有cookie。而tomcat是将cookie封装到了请求中的,所以要用request去拿。
session的实现机制是先生成一个sessionid,然后将数据放在服务端,将sessionid放到cookie中通过response发送给浏览器,浏览器下次来访问的时候,会在request的cookie中带上sessionid,然后通过sessionid在服务器的缓存中获取实际数据。所以获取sesssion依赖于request中带的sessionid,通过request去获取是最合理的设计方式。 当然如果httpserver硬要设计成通过response获取也不是不行,毕竟response和request就是一一对应的,只是那样逻辑就不太顺畅。
24,923
社区成员
16,548
社区内容
加载中
试试用AI创作助手写篇文章吧