web2py 操作cookie 深入思考

烂漫一生 提交于 2019-12-06 14:07:54

前些日子,用web2py做一个自我日常管理的网站,发现cookie这关死活过不了,思路很简单:

从request获取cookie 然后读取值(没有该cookie则创建)

修改cookie的值,送到response中,这样完成了一次更新

就是这么简单的一个问题,却出现各种奇怪的问题,为难了一段时间,开始觉得网上的API说明太少了,官方的例子也特别的稀少,如今做android和网站交互的时候,只能打开了web2py的服务器来测试android客户端,一时灵感,想解决这个问题,以下是说明和解决方案。

直接调用

response.cookies['your key'] 这样获取值,总是会有问题,但是关注官网的例子,就会发现其实是esponse.cookies['your key'] .value

那么cookies['key']到底得到了什么,为什么操作不正确呢,做了一个测试,直接return这个 response.cookies['your key'] 

其结果是这样的


这是什么,web2py框架自动的给这个返回值加了默认布局器,所以完全可以认为返回的是dict对象,不然web2py不会作这一步处理,如果不知道默认布局是什么看起来会非常费劲,因此我对这个值进行遍历,代码如下:

{{=len(result)}}
<br>
{{num=1}}
{{ for i in result:}}
{{=num}} {{=i}}
<br>
{{num=num+1}}
{{pass}}

{{=result.value}}

这是标准的web2py代码,结果如下:

8 
1 comment 
2 domain 
3 secure 
4 expires 
5 max-age 
6 version 
7 path 
8 httponly 
71

即这个返回的单个cookie含有一个71的值,还有8个各种默认的变量,实际上是也是dict对象,只是没有打印出值来,不指定的时候应该也是空的。

trick就在读取cookie的时候需要这样cookies['key'].value

写的时候要这样cookies['key']=some value

下面贴出记录访问次数的代码

def CookieOperatorTest():
    if request.cookies.has_key('my'):
        s = 'You are ' + request.cookies['my'].value + ' come!'
        response.cookies['my'] = 1 + string.atoi(request.cookies['my'].value)
        return s
    else:
        response.cookies['my']=1;
        return 'You are first come!'



                                    
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!