2012-02-27 56 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