由于Http是无状态协议,http访问建立的是短连接。也就是说,用户从A页面跳转到B页面会重新发送一次HTTP请求,而服务端在返回响应的时候是无法获知该用户在请求B页面之前做了什么的。1为了解决这个问题,session应运而生。
当用户首次通过浏览器访问服务器时,服务器会创建一个session,并把sessionId返回给用户(每个session都有一个sessionId与之对应),浏览器将sessionid保存在cookie中,当用户再次访问服务器时,会携带sessionid,服务器会验证sessionId来实现状态保持。
服务端:以Java为例,用户在访问服务器HttpServletRequest的getSession(true)时,session被创建,并存储在服务器的内存中,当然也可以持久化到文件、数据库、memcache、redis中。 tomcat的ManagerBase类提供创建sessionid的方法:随机数+时间+jvmid。
客户端:sessionid保存在cookie中。
关闭浏览器并不会关闭session,只有invalidate或登录超时session才会销毁。
来源:晋哥哥, 《大话session》,博客中国。 ↩︎