其中会话变量存储在java Web应用程序中

You*_*sef 8 java session servlets spring-mvc

1 - 会话变量存储在java Web应用程序中的哪些位置?在客户端或服务器端?

2 - 如果我在会话中放入了大量对象和变量,它会减慢客户端的请求吗?

PS在我的情况下,我使用spring mvc.

Ell*_*sch 11

"session"变量由两部分组成,一个非常小的会话标识符,存储在客户端上,通常被命名jSessionId并存储为cookie.但是,sessionId也可以编码为URL.

会话的第二部分是实际数据,它存储在服务器上.如果您的服务器是多服务器群集的一部分,则可能位于服务器端数据库中.每个会话由该sessionId标识,并且客户端随每个请求发送它.这就是它设计得非常小的原因.


Dou*_*Hou 6

简单的答案是:您的会话数据存储在服务器端.

Web浏览器将只获取一个字符串ID来标识它的会话.

事实上,Spring安全性会更多地关注会话信息,因为如果用户甚至不登录,则会话可能根本不存在.

当我只使用spring mvc时,我不使用session来存储重要数据,因为session只存储在内存中.它旨在临时保存数据.

当我使用spring security时,我必须在内存中保存许多重要的东西,例如无法在Internet上传输的帐户数据,并且我不会每次都从数据库加载它们.所以我必须选择会话.

因此,当存储登录会话的服务器关闭时,所有已登录此服务器的用户都必须重新登录以检索另一个会话ID.

会话并不总是最佳选择,因为当我们有许多使用会话数据的服务器时,我必须在所有服务器之间共享数据,无论如何,net IO对于服务器而言是昂贵的.

  • 服务器端会话变量存在很多问题。最重要的是服务器可扩展性和性能。考虑一下,如果您有很多服务器,其中一台出现故障,会发生什么情况?该服务器中的会话数据将丢失。当然,你可以将会话数据存储在数据库或memcached服务器中,但这意味着所有会话操作都会触发网络IO,这会花费很多。 (2认同)