2012-02-27 45 views
1

我在appengine上使用webapp2会话库。在我的应用程序中,Cookie的默认路径是/,但我想要一个特殊的cookie仅在/api/.*上有效。 set_cookie方法不允许指定新cookie的配置,只能指定cookie的名称和后端。我也没有找到创建cookie后更改路径的方法。更改webapp2中的cookie路径

from webapp2_extras import sessions 


sessions_store = sessions.get_store(request=self.request) 
special_cookie = sessions_store.get_session(name='special_cookie', backend='securecookie') 

... # change ``special_cookie`` path ? how? 

谢谢!

回答

3

您没有使用cookies,而是使用会话数据。这完全不同。 Cookies存储在浏览器中,会话存储在服务器中。因为会话的思想是它的一面,所以你必须手动实现你想到的任何特定于路径的逻辑。

如果你想使用一个实际的cookie与特定的路径,这很容易和documented in the web2py docs

response.cookies['mycookie'] = 'somevalue' 
response.cookies['mycookie']['expires'] = 24 * 3600 
response.cookies['mycookie']['path'] = '/' 

什么是会话和饼干之间的区别? Cookie是存储在浏览器上的一大块信息。因此,举例来说,如果你想跟踪的购物车的内容,再加上字体大小的喜好,你可以存储一些饼干,像这样:

  • SHOPPING_CART:项目1,项目2,项目3
  • FONT_SIZE:12磅
  • 名称:弗雷德

每个这些变量的将被存储在浏览器与饼干。与会话,你只有一条信息存储在浏览器中,一个SESSION_ID:

  • SESSION_ID:56a3y678

然后在服务器端,你将有可能会话数据库看起来像这样:

| SESSION_ID | KEY   | VALUE 
--------------------------------------------------- 
| 56a3y678 | shopping-cart | Item1,Item2,Item3 
| 56a3y678 | font-size  | 12pt 
| 56a3y678 | name   | Fred 

像这个服务器端存储信息有很多好处。首先,你可以存储比浏览器可能让你更多的信息。另外,由于服务器维护自己的数据库,因此可以更安全地信任它;虽然is_admin_user的cookie不可信,但会话变量通常可以。

显然,不利用浏览器来更新所有内容,而是依赖于服务器软件。例如,如果您有10台Web服务器和用户在它们之间轮换,则它们都必须与同一个会话数据库进行通信才能正常工作。

+0

谢谢肯!据我所知,会话基于cookie,不是吗?我宁愿坚持使用webapp2的会话库。但是,如果我找不到其他方式来实现我所寻找的目标,我会实现您的想法,至少创建cookie。再次感谢! – 2012-02-28 05:28:57

+0

没问题。我更新了我的答案以解释会话变量和cookie之间的区别。 – 2012-02-29 13:40:02

+0

谢谢肯!我要做的是:“分开”应用程序。由于appengine不支持定制域上的SSL,因此我将执行跨站点请求https:// .appspot.com(后端)。我将通过cookie将名称空间传输到后端。前端只会使用一个带有布尔型变量的cookie来指示用户是否已经通过了后端的验证。由于命名空间仅通过安全连接传输,因此前端cookie由snnifer捕获并没有什么大不了的。此外,命名空间在securecookie内部被加密,所以用户不能改变它。 – 2012-02-29 20:12:29

1

默认SessionStore类使用default configuration options,其中pathcookie_args设置为'/'实例化。

如果您希望您的Cookie具有不同的路径,例如/api,你会想创建你自己的SessionStore类的实例。它可以用重写的配置值来实例化。这样您可以拥有会话存储,仅对指定的路径有效。

+0

这个想法让我想起了''sessions.py''源文件。但我不知道如何将我的SessionStore子类传递给get_store函数。我是否也需要重新实现这个功能? :/ – 2012-02-28 05:35:51