新手javaee session

登录一个账号 使用session的时候 浏览器的cookie会保存一个 session的ID ,改浏览器
访问同一项目的的时候都会,不同的请求都会根据保存的 ID访问同一个session。
可是
浏览器保存一个ID ,之后浏览器如果又 同时登录了几个不同的账号,按理说应该有多个
Session ,浏览器要保存多个ID,浏览器在访问的时候 ,会把浏览器保存的ID放在request
发送过去?? 那服务器怎么区分是哪个用户

3个回答

你第一次请求网站,浏览器不知道cookie,所以不会带任何cookie,此时服务器判断,你客户端没有cookie,它就视作一个新的会话。
然后它会在服务器的内存里建立一个session,其中的id返回给客户端作为cookie。之后客户端浏览器的提交带上cookie,服务器发现有cookie,不会再生成新的id,而是一直用这这个id去关联它内存里的session
你反复登录,sessionid是不变的,变化的是服务器内存里的session里的用户名。

只有你关闭了浏览器,再重新打开,那么它丢失了之前的cookie,回到了我开头说的状态,此时session id才会重新获取。

你在哪个页面访问,服务器就会根据这个页面的session确定你是哪个用户

session实现原理
场景1:第一次访问
客户端请求到达tomcat,服务器会读取请求中的cookie,查看其中键名叫做JSESSIONID的cookie,
第一次访问之前从来没有保存过此cookie所以无法找到,找不到服务器就判断这是一个新的会话的开始。
则在服务器的内存中开辟一个空间,为此客户端提供保存数据的功能,这个空间就是session对象,
因为服务器上会为很多客户端开辟空间,session对象有很多,都保存到session集合中,为了方便区分。
为每一个session对象都指定了唯一的标记,这个标记就是sessionid,接下来以sessionid创建cookie,
键名为JSESSIONID,通过cookie返回给客户端,客户端浏览器保存到内存cookie中。
场景2:紧接着第二次访问:
客户端请求中携带着第一次访问获得到的JSESSIONID到达服务器,服务器能够读取到传递过来的sessionid,
接下来就去session集合中根据id取到第一次请求的时候创建的session对象为当前请求提供保存数据或者读取数据的功能,
第一次请求和第二个请求共用同一个session对象。
场景3:三十分钟后第三次访问:
客户端请求仍然携带JSESSIONID到达服务器,服务器根据id去集合中找对应的session对象,但是此时已经超出30分钟,
服务器已经自动将session对象销毁。所以此时虽然有sessionid但是已经找不到session对象。然后服务器会重新创建一个
新的session对象,那么从这一次请求开始就是一个新的会话,第三次已经和第一次和第二次请求不共享同一个session对象了。
场景4:紧接着关闭浏览器重新访问:
关闭浏览器意味着保存到浏览器内存中的cookie对象已经销毁,客户端请求就无法携带JSESSIONID,这次请求相当于第一次请求,
会重新创建新的session对象
场景5:浏览器禁止cookie访问:
浏览器禁用cookie那么意味着浏览器不提供保存cookie和每次请求携带cookie的功能,那么服务器每次都无法获取JSESSIONID,每次都
会创建新的session对象,相当于每次请求都是一次新的会话

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问