1

appengine で webapp2 セッション lib を使用しています。私のアプリでは、Cookie のデフォルト パスは ですが/、特別な Cookie を でのみ有効にしたいと考えています/api/.*。このset_cookieメソッドでは、新しい Cookie の構成を指定することはできず、Cookie の名前とバックエンドのみを指定できます。また、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?

ありがとう!

4

2 に答える 2

4

Cookie を使用しておらず、セッション データを使用しています。それはまったく違います。Cookie はブラウザに保存され、セッションはサーバーに保存されます。セッションの考え方はサイドワイドであるため、念頭に置いているパス固有のロジックを手動で実装する必要があります。

特定のパスを持つ実際の Cookie を使用したい場合、それは簡単で、web2py docs に文書化されています:

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

セッションとクッキーの違いは何ですか? Cookie は、ブラウザに保存される単一の情報の塊です。たとえば、ショッピング カートの内容とフォント サイズの設定を追跡したい場合は、次のようにいくつかの Cookie を保存できます。

  • SHOPPING_CART: アイテム 1、アイテム 2、アイテム 3
  • FONT_SIZE: 12pt
  • 名前: フレッド

これらの各変数は、Cookie を使用してブラウザーに保存されます。セッションでは、session_id という 1 つの情報のみをブラウザーに保存します。

  • セッション ID: 56a3y678

サーバー側では、次のようなセッション データベースが作成されます。

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

このようにサーバー側に情報を保存することには、多くの利点があります。1 つは、ブラウザーが許可するよりも多くの情報を保存できることです。また、サーバーは独自のデータベースを維持しているため、より安全に信頼できます。is_admin_user の Cookie は信頼できませんが、セッション変数は一般に信頼できます。

欠点は、明らかに、ブラウザーに頼ってすべてを最新の状態に保つのではなく、サーバー ソフトウェアに頼っていることです。たとえば、10 台の Web サーバーがあり、ユーザーがそれらの間でローテーションする場合、正常に機能するには、すべてのユーザーが同じセッション データベースと通信する必要があります。

于 2012-02-27T23:07:54.530 に答える
1

デフォルトでは、 SessionStoreクラスはデフォルトの設定オプションを使用してインスタンス化されます。ここで、pathforcookie_argsは に設定されてい'/'ます。

Cookie に別のパスを持たせたい場合、たとえば、 SessionStoreクラス/apiの独自のインスタンスを作成する必要があります。オーバーライドされた構成値でインスタンス化できます。このようにして、指定されたパスに対してのみ有効なセッション ストアを作成できます。

于 2012-02-27T23:44:25.193 に答える