【问题标题】:Handling Session ID with Spring使用 Spring 处理会话 ID
【发布时间】:2010-05-29 16:11:54
【问题描述】:

我正在尝试为 GWT 构建一个 Spring 服务器(您可以将其视为 Javascript AJAX 客户端)。但我无法决定建筑的某一点。 session应该如何创建和使用?

显而易见的最简单的方法是使用 HTTP 会话(cookie 和其他东西)。看起来不错,但我认为将会话 ID 与标头分开发送会更好(SOAP 样式)。

那么,什么更好: getMyPetsName(String sessionID, int petID)getMyPetsName(int petID) + 通过 HTTP 标头(cookie 或其他东西)的会话 ID。

另一个问题是,如果我使用第一种方式(我更喜欢这种方式) - 我如何处理 Spring 中的会话?我真的是春天的新手,谷歌搜索没有帮助。我的意思是:

String getMyPetsName(String sessionID, int petID) {
    Session s = someWayToGetItById(sessionID);
}

提前致谢。

【问题讨论】:

    标签: spring session


    【解决方案1】:

    如果您可以选择,我会选择始终发送会话 ID。

    这会让事情变得更容易,当用户在同一个会话中打开多个标签时也是如此。

    如果您不使用 Spring MVC,我认为 Spring 不会对您处理会话的方式施加太多限制/假设。有许多缓存,例如 ehcache,可以使用 spring 设置并存储您的会话。更好的缓存还允许会话分布在机器上并持久存储,而不会影响代码库。

    【讨论】:

    • 是的,这就是为什么我认为这样做会更好。但是第二个问题仍然悬而未决,我不知道如何在 Spring 中通过 ID 获取会话。
    • 是的,我编辑了我的答案以包含它。我只会使用一个很好的缓存实现,它可以由 Spring 轻松配置。然后 Spring 会将其注入到您的组件中。通常他们有一个允许获取会话数据的单例。
    • 嗯,所以您建议将会话与容器会话分开处理。没有办法重用容器会话吗?例如强制它给我一个具有指定 ID 的会话?
    • 这更像是 WebMVC,WebFlow 所做的,但我担心如果您在浏览器上使用 GWT,这些会话将开始相互争斗,因为他们对自己应该做什么的假设会略有不同。这些容器会话从假设浏览器几乎没有状态(HTTP 是无状态协议)开始,但是对于 GWT 和其他 Javascript 框架,这不再有效。而且您将继续与多个打开的标签问题作斗争。使用愚蠢的缓存,可能会发生不良交互的移动部件要少得多
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    相关资源
    最近更新 更多