当用户首次与web服务器创建链接的时候,服务器会给用户分发一个SessionID做为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SesstionID包含在HTTP头中提交给web服务器,这样web服务器就能区分当前请求页面是哪个客户端。这个SessionID就是保存在客户端的,属于客户端Session。java
其实客户端Session默认是以cookie的形式来存储的,因此当用户禁用了cookie的话,服务器端就得不到SessionID。这时咱们可使用url的方式来存储客户端Session。也就是将SessionID直接写在了url中,固然这种方法不经常使用。web
sessionid是一个会话的key,浏览器第一次访问服务器会在服务器端生成一个session,有一个sessionid和它对应。tomcat生成的sessionid叫作jsessionid。 session在访问tomcat服务器HttpServletRequest的getSession(true)的时候建立,tomcat的ManagerBase类提供建立sessionid的方法:随机数+时间+jvmid; 它存储在服务器的内存中,tomcat的StandardManager类将session存储在内存中,也能够持久化到file,数据库,memcache,Redis等。客户端只保存sessionid到cookie中,而不会保存session,session销毁只能经过invalidate或超时,关掉浏览器并不会关闭session。数据库
Cookie分为内存中Cookie(也能够说是进程中Cookie)和硬盘中Cookie。大部分的Session机制都使用进程中Cookie来保存Session id的,关闭浏览器后这个进程也就自动消失了,进程中的Cookie天然就消失了,那么Session id也跟着消失了,再次链接到服务器时也就没法找到原来的Session了。 固然,咱们能够在登录时点击下次自动登陆,好比说CSDN的“记住我一周”,或者咱们的购物车信息能够在切换不一样浏览器时依然可用。这就要用到咱们上文提到的另外一种Cookie了——硬盘中Cookie,这时Session id将长期保存在硬盘上的Cookie中,直到失效为止。浏览器
详细参考:《服务器端Session和客户端Session》tomcat