【问题标题】:Turn off AppEngine (Java) sessions for certain requests针对某些请求关闭 AppEngine (Java) 会话
【发布时间】:2012-04-10 12:47:17
【问题描述】:

我们在 GAE/J 应用程序中使用 sessions。上周末,我们的数据存储写入出现大幅峰值,这似乎是由于创建了大量 _ah_SESSION 实体(每分钟大约 100-200 个)造成的。正如我们所知,有一个流氓任务队列创建它们,因为当我们清除队列时它们停止了。该任务是我们每小时运行的mapper 进程的一部分。

我们不需要该每小时映射器中的会话(或者实际上在我们的任何任务队列或 cron 作业或许多其他请求中)。有没有办法禁止为选定的 URL 创建会话?

【问题讨论】:

    标签: google-app-engine session


    【解决方案1】:

    很遗憾,这无法做到。

    当您有一个非浏览器客户端(通过 REST 或 mapreduce 作业的设备)时,这尤其令人讨厌,其中每个请求都会在数据库中生成一个新的 _ah_SESSION 实体。

    避免这种情况的唯一方法是编写自己的会话处理程序:例如设置/检查 cookie 并将其设置为忽略某些路径的 servlet 过滤器。

    编辑:

    我刚刚意识到可能还有另一种方法:确保您的客户端(mapreduce 作业)设置一个具有正确名称的虚拟 cookie。 GAE 在生产中使用名为 ACSID 的 cookie,在开发服务器上使用名为 dev_appserver_login 的 cookie。只需始终使用相同的 cookie 值,因此所有请求都将被视为一个用户/会话。

    查找/保存会话对象仍然会有开销,但至少不会创建无数的_ah_SESSION 实体。

    【讨论】:

    • 谢谢彼得。我们将使用自定义处理程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多