Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Google应用程序引擎-调用getSession().invalidate();导致应用程序引擎行为怪异_Java_Google App Engine_Session - Fatal编程技术网

Java Google应用程序引擎-调用getSession().invalidate();导致应用程序引擎行为怪异

Java Google应用程序引擎-调用getSession().invalidate();导致应用程序引擎行为怪异,java,google-app-engine,session,Java,Google App Engine,Session,当我调用hreq.getSession().invalidate()时应用程序引擎速度大大降低。我查看了appstats,发现在一个没有数据库调用的页面上,它分别调用了memcache.get和datastore.get 23次。这些调用的堆栈跟踪显示它是从getSession()调用的。这仅在生产服务器上发生。每次我向页面发出请求时,它都会进行一系列memcache和datastore调用。不过,当我重新启动浏览器时,速度会变慢 当我更改代码,将会话的isLoggedIn属性设置为false,

当我调用
hreq.getSession().invalidate()时应用程序引擎速度大大降低。我查看了appstats,发现在一个没有数据库调用的页面上,它分别调用了memcache.get和datastore.get 23次。这些调用的堆栈跟踪显示它是从getSession()调用的。这仅在生产服务器上发生。每次我向页面发出请求时,它都会进行一系列memcache和datastore调用。不过,当我重新启动浏览器时,速度会变慢

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

作为测试,我没有使我的会话无效,但我更改了浏览器会话cookie的值,应用程序引擎显示了相同的行为


这是应用程序引擎的一个bug吗?

getSession()与memcache和数据存储交互也就不足为奇了。使用数据存储查看器查看_ah_会话实体。您会注意到这是一个Blob,Blob是会话信息。看一看

appengine包括一个实现 使用servlet会话的会话数 接口。实现存储 应用程序引擎中的会话数据 用于持久性的数据存储,以及 使用memcache提高速度。和大多数人一样 其他servlet容器,会话 使用设置的属性 会话期间的session.setAttribute() 请求保存到位于的数据存储中 请求的结尾


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

是的,但它会进行大约20次数据库调用,在我重新启动浏览器之前,它会在我访问的每个页面上执行此操作。