银翼的魔术师s
2018-11-25 08:05
采纳率: 69.1%
浏览 556
已采纳

新手javaee session

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

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • threenewbee 2018-11-25 16:05
    已采纳

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

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

    打赏 评论
  • 叫我阿桑 2018-11-26 07:12

    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对象,相当于每次请求都是一次新的会话

    1 打赏 评论
  • 欧阳惜竹 2018-11-25 08:39

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

    打赏 评论

相关推荐 更多相似问题