session何时访问不到

一.结论:
1.当在同一个浏览器中同时打开多个标签,可以访问同一个session;
2.当用同一个浏览器打开两个独立窗口, 可以访问同一个session;
3.当使用不同的浏览器时,发送请求,即使发送相同的请求,是不同的session;
4.当把当前某个浏览器的所有窗口都关闭,再打开,发起相同的请求时,是不同的session。

二.原理:
A.Session工作原理:
当一个Session开始时,Servlet容器会创建一个HttpSession对象,那么在HttpSession对象中,可以存放用户状态的信息,Servlet容器为HttpSession对象分配一个唯一标识符即Sessionid,Servlet容器把Sessionid作为一种Cookie保存在客户端的浏览器中(实际是保存在浏览器的进程中,没保存在浏览器所在电脑的硬盘中)用户每次发出Http请求时,Servlet容器会从HttpServletRequest对象中取出Sessionid,然后根据这个Sessionid找到相应的HttpSession对象,从而获取用户的状态信息。(因为sessionid作为cookie是保存在浏览器的进程中的,所以关闭浏览器后就session就失效了<访问不到了>. 由于服务器会为不同品牌的浏览器创建对应的session<一个浏览器对应一个session对象>所以用不同的浏览器访问不到)

**解决方法:**我们可以创建一个名称为JSESSIONID的cookie,其中保存session的ID,并设置cookie的最大存活时间,让cookie保存到硬盘上(即使浏览器关闭,cookie也不会销毁),这样下次访问服务器时,还可以将sessionid带给服务器,服务器可以通过sessionid获取到之前的session。 从session中获取到商品信息

session何时访问不到

B.Session销毁时机:
一个是Session.invalidate()方法,不过这个方法在实际的开发中,并不推荐,在强制注销用户的时候会使用;
一个是session超过默认时间后(或者超过设定的时间)(就是session超时),Session会销毁。

注:请求数据包和响应数据包的格式
https://blog.csdn.net/m_miao001/article/details/81085889
请求数据包结构:
一、【请求行】:请求行在请求数据包的第一行,包含请求类型(get/post)、请求资源路径、协议的版本和类型。
二、【消息头】(也叫请求头或请求消息头):若干消息头样式(w3c定义的一些有特殊意义的键值对),如content-type=text/html,charset=utf-8等,服务器端和客户端都会遵循消息头的约定,也可以通过代码设置。
三、【空行】请求头与请求体之间用一个空行隔开;
四、【消息正文】也叫实体内容或者请求实体内容或请求体:如果请求方式为post,请求参数和值就会放在这里,如果为get那么请求参数和值就会包含在资源路径上。

响应数据包:
一、【状态行】:包含两部分内容的协议的版本和类型,状态码(500表示程序出错,404找不到资源路径,200正常运行)。
二、【消息头】(也叫响应头或响应消息头):同上。
三、【空行】响应头与响应体之间用一个空行隔开;
四、【响应正文】也叫实体内容或者响应实体内容或响应体:服务器返回给浏览器的处理结果。

注: 会话是什么?
当浏览器发请求访问服务器开始,到访问服务器结束,浏览器关闭为止,这期间产生的所有请求和响应加在一起,就称之为浏览器和服务器之间的一次会话
https://blog.csdn.net/weixin_45151795/article/details/105999915

注:cookie传送数据原理
https://blog.csdn.net/qq_39323945/article/details/104600643
session何时访问不到
cookie默认的生命周期在浏览器关闭后就结束了。创建cookie的路径下及其子路径下可以访问到cookie

通过Set-Cookie响应消息头将cookie从服务器端发送给浏览器,让浏览器保存到内部;而浏览器一旦保存了cookie,以后浏览器每次访问服务器时,都会通过cookie请求消息头,将cookie信息再带回服务器中。

session何时访问不到

注:session和cookie两者的区别
Cookie和session都属于会话技术,都可以保存会话中产生的数据,但由于cookie和session的工作原理和特点不同,因此两者的应用场景也不一样。

Cookie的特点:

cookie是将会话中产生的数据保存在浏览器客户端, 是客户端技术(JS可以访问cookie)

cookie是将数据保存在客户端浏览器,容易随着用户的操作导致cookie丢失或者被窃取,因此cookie中保存的数据不太稳定,也不太安全。

但cookie将数据保存在客户端,对服务器端没有太多影响,可以将数据保存很长时间。
cookie只能保存文字不能保存对象(session可以)
cookie保存中文需要用URLEncoder.encode(数据,“utf-8”)进行编码. 然后用URLDecoder.decode(数据,“utf-8”)进行解码

总结:因此cookie中适合存储需要长时间保存、但对安全性要求不高的数据。

浏览器对cookie的大小和个数都有限制,一般推荐每一个站点给浏览器发送的cookie数量不超过20个,每一个cookie的大小不超过4kb。超过的话就得分多个cookie存储或采用session存储.
Cookie的应用:实现购物车、记住用户名、30天内自动登录等。
session何时访问不到
Session的特点:

session是将会话中产生的数据保存在服务器端,是服务器端技术
session将数据存在服务器端的session对象中,相对更加的安全,而且更加稳定。不容易随着用户的操作而导致session中的数据丢失或者是被窃取。
但session是服务器端的对象,在并发量较高时每一个浏览器客户端在服务器端都要对应一个session对象,占用服务器的内存空间,影响效率。
总结:因此session中适合存储对安全性要求较高,但不需要长时间保存的数据。 cookie有路径问题限制, session没有路径问题
Session的应用:保存登录状态、保存验证码