关闭某些请求的AppEngine(Java)会话

时间:2012-04-10 12:47:17

标签: google-app-engine session

我们在GAE / J应用程序中使用sessions。在周末,我们的数据存储区写入量大幅上升,这似乎是由大量_ah_SESSION实体创建的(每分钟大约100-200)。我们可以说,有一个流氓任务队列创建它们,因为它们在我们清除队列时停止了。该任务是我们每小时运行的mapper流程的一部分。

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

1 个答案:

答案 0 :(得分:3)

不幸的是,无法做到。

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

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

编辑:

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

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

相关问题