webpy+DBUtils是如何将数据库连接数占满的

webpy中auto_application的cookie共享问题

妙音 posted @ 2013年11月16日 09:27 in webpy , 1039 阅读

在webpy中使用auto_application划分网站的url结构,会发现是个很好用的东西。

使用过程中却发现每个auto_application默认有自己单独的cookie。

范例

#encoding=utf-8
import web
appA = web.auto_application()
appB = web.auto_application()

urls = (
    '/save',   appA,
    '/get',    appB
)

class SaveName(appA.page):
    path = '/?'

    def GET(self):
        web.setcookie("name", "wyq", expires=24 * 60 * 60)
        return web.cookies().get("age")


class GetName(appB.page):
    path = '/?'

    def GET(self):
        return web.cookies().get("name")

app = web.application(urls, globals())

if __name__ == '__main__':
    web.config.debug = True
    app.run()
    #print app.request("/save").data
    #print app.request("/get").data

上面代码,生成两个auto_application appA与appB。

appA处理所有以/save开头的url请求,appB处理所有以/get开头的url请求。

appA = web.auto_application()
appB = web.auto_application()

发送http://0.0.0.0:8080/save请求,将name信息保存在cookie中。

web.setcookie("name", "wyq", expires=24 * 60 * 60)
 
发送http://0.0.0.0:8080/get请求,获取name值。
预想是返回name值,却发现结果为空。什么原因呢?
观察下面从chrome中取到的截图。
/save请求
 
注意上面的Set-Cookie,多了个path=/save/。原来在application中保存cookies时,会设置cookies的path属性。
 
cookie的path属性,用于限制cookie的访问域,只有此域下的请求才能取到此cookie信息。
换句话说只有url以/save/开头的请求才能,取到此cookie的信息。
上面appA属于/save/域下的,appB属于/get/域下的。它们属于不同的域,所以appB访问不到appA中的cookie。
 
如何解决呢?办法就是在设置cookie时添加path="/"的属性,即可解决。
web.setcookie("name", "wyq", expires=24 * 60 * 60, path="/")
 
 
 

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter