使用django框架时session有多种存储方式可供选择,其中我认为基于memcache是最快的,因此我的应用中均用memcache做session的存储,而且现在的云计算平台比如gae,sae,bae以及准备中的ace都支持memcache。然而我在使用中发现了一个问题就如果session中存储的值是字典的话,到第三层是无法保存的。如比我的session存储的结构如下:

user=Users()
#其中user中有个字典属性childMeta
power = {'isLogin':False, 'user':None}

如果将power保存到session中时childMeta字典中的值会丢失,这个现象在bae是完全丢失。在sae上时偶尔丢失(第一次肯定丢失),我测试看到的现象是这样。在本机测试是没有这个问题的,因此我怀疑是ae平台做了什么限制,或者ae平台的其他限制影响到了这个功能。

在此记录此事,以备以后进一步研究。

其实对于此事我还有另一种想法,就是session中的对象实例的字典数据无法保存传递,不过这个没做进一步验证。

我现在的解决办法是将childMeta字典拿出来直接放在power字典下,存进session中,经过测试不在出现session内容丢失的情况。

power = {'isLogin':False, 'user':None, 'meta':None}

如果有其他发现我会及时汇报的。