当用户首次访问一个网站时,初始的
服务器响应可能包含一个 SET-Cookie
头来设置会话 ID。例如:
Set-Cookie: JSESSIONID=04427E42C4AE7A5DD1CCE86B8B5F7110; Path=/TestSite/; HttpOnly
然后客户端将在后续的HTTP请求中携带它,这样就可以在
cookie header
中找到它,例如:Cookie: JSESSIONID=04427E42C4AE7A5DD1CCE86B8B5F7110
我的问题是:
所以真正的会话对象是在服务器上创建和维护的一些数据结构。服务器只向客户端发送其索引键。当后续请求到来时,服务器将使用该键来查找存储在服务器上的会话数据。如果必要,服务器可以使用数据库来存储会话数据。这个想法正确吗?
以下Java代码实际上正在操作存储在服务器上的会话数据。虽然它看起来像是在操作请求对象。对吗?
request.getSession().setAttribute("accountId", user.getId());
以下代码本质上是一个键(sessionid)查找过程。它通过查找从客户端发送的“session id” cookie来查找服务器上的会话对象。对吗?
Session s = (String) request.getSession();
是否有可能服务器不发送“Set-Cookie”头?或者它是强制性的吗?
似乎像Redis这样的键值存储非常适合会话存储。有人试过吗?