【问题标题】:Difference between session handling locally and on server with Google App Engine本地会话处理和使用 Google App Engine 在服务器上处理会话的区别
【发布时间】:2015-01-14 15:47:33
【问题描述】:

我正在使用会话并已在我的 GAE 应用中启用会话

<sessions-enabled>true</sessions-enabled>
<async-session-persistence enabled="true" />

我使用会话来进行简单的用户登录。在本地,这工作得很好,我的会话一直保持到我注销并且我所有“受保护”的页面都可以通过有效的会话查看。

我在 apppot 上的实时/生产服务器的问题在于它根本无法工作。当我登录并进行身份验证时,我重定向到另一个页面。此页面检查我是否有一个有效的会话(使用标准 HttpSession),但不知何故失败了,然后将我重定向回登录屏幕。

有谁知道为什么它不能在 GAE 生产环境中工作,但在本地工作得很好?

这是我用来检查当前会话有效性的代码:

public static boolean isValidSession(HttpServletRequest request) {
    return (request.isRequestedSessionIdValid());
}

更新: 我正在创建这样的会话 ID:

public static void createNewSession(HttpServletRequest request, final String username) {
        HttpSession session = request.getSession(true);
        session.setAttribute("username", username);
    }

【问题讨论】:

  • 如何设置会话ID?
  • @AndreiVolgin,添加了会话 ID 的代码。
  • 会话处理,你的意思是?
  • @Momergil,修正了那个错字,谢谢。

标签: java google-app-engine session


【解决方案1】:

在本地处理会话和在 Google App Engine 上的生产中处理会话没有区别。它们在两种环境中的工作方式相同。我能想到的唯一区别是,当您在本地创建会话(例如在登录时或登录之后)并且您在会话中设置一些属性说用户的访问级别时,即使属性的值发生变化,它也不会改变(比如说,如果它是从登录后更改的某个数据库中动态提取的),直到您关闭选项卡并再次登录,但是在生产中,如果数据库中的属性发生更改,然后如果您刷新页面,它将从数据库中获取新值。嗯,这是我的经验。希望能帮助到你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-25
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    相关资源
    最近更新 更多