💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] ## 1. 创建时间 服务器在提供服务的时候,会有很多用户,此时如何识别不同的用户呢?session是服务器对用户的标识,代表了客户端与服务器之间的一次会话,其具有唯一的sessionId(24个字符组成的字符串)。 1. 首先,session不是浏览器向服务器发起请求时就被建立的,而是可以控制的 2. 创建session: 在Servlet中,你肯定用过下面这句话, ~~~ # 如果当前没有session,则会立刻建立一个session;如果有session则返回当前session。 HttpSession session = request.getSession(); # 或者 的效果是一样的。 HttpSession session = request.getSession(true); ~~~ ## 2. 销毁时间 1. 服务器会将长时间没有活动的session从内存中清除(默认20分钟) ## 3. 传递 1. session存在于服务器端,只有sessionid会被发送到客户端。 1. session是存储在服务器端的,每一个session都有一个id。 2. 当创建一个session后,会将该sessionID存放到此次访问的cookie中,当下次客户端的访问到来需要提取服务器中的session时,会根据访问中cookie里的sessionID值来找到服务器中的具体session。 ## 4. 在实际开发中的作用 由上面所描述的session实现机制,我们会发现,为了弥补http协议的无状态的特点,服务端会占用一定的内存和cpu用来存储和处理session计算的开销,这也就是tomcat这个的web容器的并发连接那么低(tomcat官方文档里默认的连接数是200)原因之一。因此很多java语言编写的网站,在生产环境里web容器之前会加一个静态资源服务器,例如:apache服务器或nginx服务器,静态资源服务器没有解决http无状态问题的功能,因此部署静态资源的服务器也就不会让出内存或cpu计算资源专门去处理像session这样的功能,这些内存和cpu资源可以更有效的处理每个http请求,因此静态资源服务器的并发连接数更高,所以我们可以让那些没有状态保持要求的请求直接在静态服务器里处理,而要进行状态保持的请求则在java的web容器里进行处理,这样能更好的提升网站的效率。