web2py 操作cookie 深入思考

前些日子,用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!'



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值