当我调用hreq.getSession().invalidate(); 应用引擎极大地放慢了速度。 我查看了appstats,看到在没有进行数据库调用的页面上,它每次调用memcache.get和datastore.get 23次。 这些调用的堆栈跟踪显示它是从getSession()调用的。 这只发生在生产服务器上。 每次我向页面发出请求时,都会产生一堆memcache和数据存储区调用。 当我重新启动浏览器时,这种减速消失了。

当我更改代码以简单地将会话的isLoggedIn属性设置为false时,而不是调用hreq.getSession().invalidate(); 一切都很好。

作为测试,我没有使我的会话无效,但我更改了浏览器的会话cookie的值,并且应用引擎表现出相同的行为。

这是app引擎的错误吗?

#1楼 票数:2 已采纳

getSession()与memcache和数据存储区交互并不奇怪。 使用数据存储区查看器查看_ah_SESSION实体。 您会注意到这是一个Blob,Blob是会话信息。 看看这个

App Engine包含使用servlet会话接口的会话实现。 该实现将会话数据存储在App Engine数据存储区中以实现持久性,并且还使用memcache来提高速度。 与大多数其他servlet容器一样,请求期间使用session.setAttribute()设置的会话属性将在请求结束时保存到数据存储区。

如果您使会话无效,则需要创建新会话,这需要与memcache和数据存储区进行交互。

  ask by Kyle translate from so

未解决问题?本站智能推荐:

1回复

Goog应用引擎设置属性存在问题

我在一个jsp页面中获取要设置的属性时遇到了一些麻烦: pageContext.setAttribute(“ purchaser”,购买者,PageContext.SESSION_SCOPE); 并通过以下方式在网站的其他部分进行调用 这在google app引擎开发环境中有效,但是
1回复

googleapp引擎:没有用户数据的新实例

当用户请求重定向到新实例时,我的Google引擎Java应用会释放所有用户数据: “ 此请求导致为您的应用程序启动一个新进程,从而导致您的应用程序代码首次被加载。因此,与典型的应用程序请求相比,此请求可能花费更长的时间并使用更多的CPU。 ” 因为这是非常不方便的行为,所以我尝试设置一个
1回复

SpringMvcGoogle应用引擎中的会话监听器

我正在使用Google App Engine,spring mvc和spring jpa dao。 在我的应用程序中,当会话被破坏时,我想从数据库中删除一个条目。 所以我正在使用会话侦听器,它实际上想通过spring dao bean从数据库中删除一个条目。 这是我在会话监听器中的代码
2回复

GAE会话离线或在线行为不同

我有这个代码: } 传递的卖方属性来自HTTPSession: ((卖方)req.getSession()。getAttribute(“ user”)) 这段代码离线更新了我的对象Seller,但在网上没有显示更新,它仍然是旧的对象/ ArrayList。
1回复

GWT-在RPC服务调用期间获取会话

我尝试在第一次调用RPC服务期间获取会话信息。 客户端,我打个电话: 在第一次RPC调用期间是否有另一种解决方案来获取HttpServletRequest? 谢谢。
3回复

在Google-App-Engine中使用HSQLDB

在我的轻量级网络应用程序,将在谷歌应用程序引擎上工作,我想使用HSQLDB。 在启动HSQLDB时,我使用的是这样的URL:“jdbc:hsqldb:file:./ database /”。 在本地tomcat一切顺利,但在google-app-engine我得到以下例外; 有没有人
1回复

如何在Google应用引擎上使用会话

我正在使用带有python的Google应用引擎构建一个应用程序,而且我一直在制作会话。 是否有任何应用已经为应用引擎做了? 谢谢。
2回复

Google应用引擎用户Auth:Djangoappengine与Web2py对比Webpy

我将在Gae上开发一个小型Web应用程序,其中包含注册部分,登录\\注销等等。 由于Google App Engine不支持开箱即用的会话,而且我不想使用Google帐户限制访问,因此我不得不选择提供此类设施的框架。 我的选择是: 的web2py Djangoappengin