【问题标题】:Grails 2.2.3 - How to create a new HTTP Session?Grails 2.2.3 - 如何创建一个新的 HTTP 会话?
【发布时间】:2013-07-22 15:53:34
【问题描述】:

我正在创建一个 Web 项目,我必须在其中使用自己的身份验证实现(是的,我完全知道不建议这样做,但我必须这样做......)。现在,一旦身份验证成功,我想为登录用户创建一个新的HttpSession,但是如果没有后面的 Spring Security 插件,我找不到任何可以完成类似操作的来源......背后的魔力是什么为用户创建一个新的 HttpSession?

所以,我想要实现的是以下场景

登录页面(用户已经有一个带有会话 id 的会话)--> 用户登录--> 检查登录凭据,如果登录成功,则使用新的会话 id 创建一个新会话--> 使用新的登录用户的会话。

我希望有人能帮我解决这个问题,因为我真的需要它;)

【问题讨论】:

  • 不确定你是否真的想要这个,但你可以在会话中将 userId 设置为: session["id"] = 并且可以对过滤器上的会话执行检查,并且排除登录控制器,或者只是 auth 操作(如果您有这些名称用于 login->auth 操作)
  • @SaurabhDixit 感谢这个想法,但我认为我不能使用它,因为我为每个会话创建一个用户对象并在注销时销毁会话,但我希望能够让用户启动另一个应用程序并使用不同的会话,以便我可以为当时启动的应用程序创建一个新用户......希望这听起来不太奇怪,但这基本上是我尝试实现的;)

标签: grails httpsession


【解决方案1】:

在你的控制器中,你不能做类似的事情

// get rid of any existing session
session().invalidate()
// create a new session
request.session(true)

(我还没有检查过这个的语法......而且我通常使用 Java 工作,所以它很可能是错误的,但你明白了)

【讨论】:

  • 它有效 - 非常感谢!现在只剩下一个问题:我为每个用户创建了一个会话范围的服务,但是如果我在注入的session 对象或request.session 对象上调用.invalidate,似乎我的服务也会被破坏......似乎我必须将这些东西从我的服务类中移到另一个会话范围的 bean 或类似的东西中......
  • 我认为您不应该将注入的 session 和 request.session 视为不同的东西。上面的代码所做的是销毁一个会话并创建一个新会话。根据您对@SaurabhDixi 上面的评论的回复,我认为您可能正在尝试以不应该使用的方式使用会话。为同一用户同时运行两个会话并不常见。
猜你喜欢
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 2016-09-10
  • 2012-04-22
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
  • 2014-05-25
相关资源
最近更新 更多