gpt4 book ai didi

java - session 是如何处理的?

转载 作者:IT王子 更新时间:2023-10-29 06:04:30 28 4
gpt4 key购买 nike

当用户第一次访问网站时,初始 服务器响应可能包含一个SET-Cookie header 来设置 session ID。如:

Set-Cookie: JSESSIONID=04427E42C4AE7A5DD1CCE86B8B5F7110; Path=/TestSite/; HttpOnly

然后client会在cookie header中携带它用于后续的HTTP请求: 如:

Cookie: JSESSIONID=04427E42C4AE7A5DD1CCE86B8B5F7110

我的问题是:

  1. 所以真正的 session 对象是在服务器上创建和维护的一些数据结构。服务器只是将其 index key 发送给客户端。当后续请求到来时,服务器将使用该 key 在服务器上查找 session 数据存储。如果需要,服务器可以使用数据库来存储 session 数据。 这张脑图正确吗?

  2. 以下 Java 代码实际上是在操作存储在服务器 上的 session 数据。 Though 它看起来像是在操纵请求对象。对吧?

    request.getSession().setAttribute("accountId", user.getId());

  3. 下面的代码本质上就是key(sessionid)查找的过程。它通过查找 session ID cookie 从客户端发送 来查找 服务器上 的 session 对象。对吧?

    Session s = (String) request.getSession();

  4. 服务器是否有可能不发送 Set-Cookie header ?还是必须的?

  5. Redis 之类的键值对存储似乎非常适合 session 存储。有人试过吗?

最佳答案

So the real session object is some data structure created and maintained on server.

通过 servlet session ,是的。但一般来说,您也可以在 session cookie 本身中存储“真实数据”。缺点是用户可以看到它并弄乱它,而且它只能非常小,但优点是服务器不必存储状态(并与集群中的其他人共享)。

The following Java code is actually manipulating the session data which is stored on server

没错。 Servlet API 通过 request 提供此接口(interface),因为通过这种方式它与 session key (和个人用户)相关联。

Is there any chance server doesn't send the Set-Cookie header? Or is it mandatory?

你可以把它关掉。如果您需要 session ,但不想要 cookie,它会变得有点复杂。您可以将查询参数附加到每个 URL。

It seems some key-value store like Redis is very suitable for session store. Has anyone tried that?

是的,这是一个常见的设置。

servlet 容器的默认设置是将 session 存储在内存中。这不需要任何配置或准备,但仅适用于单服务器部署。如果您有多个服务器,则需要共享 session 信息(使用 Redis 之类的东西),或者具有“粘性 session ”(将网络配置为始终将同一用户发送到同一服务器)。

关于java - session 是如何处理的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33821961/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com