FAPWS3でSet-Cookieが出来ないっていう

written by shn, on Aug 10, 2009 2:58:00 AM.

今日は残ってる仕事をしに会社に行ったはずが、Zineのpluginとか作って遊んでたら一日が終わった。 そんななかで子一時間はまったのが、FAPWS3がSet-Cookieヘッダを食っちゃうって話。

FAPWS3駆動にしたZineでadmin panelにログインできないなー、おかしいなーと奮闘してたらコレが原因だった。

Unable to set cookie with Fapws3-0.2 not Set-Cookie headers send :(

fapws.baseのstart_responseが、Set-Cookieを食っちゃってるのが原因なので、cookie関連のコードを全部消しちまえばちゃんとzineが動くようになる。

なんでstart_response.set_cookie()なんてメソッドが用意されてんのかよくわからないけど、作者の勘違いかな。

以下パッチ:

--- base.py 2009-08-09 19:37:49.587425000 +0900
+++ fapws_base.py   2009-08-09 18:38:08.873789000 +0900
@@ -1,17 +1,13 @@
 # -*- coding: utf-8 -*-

 import datetime
-from Cookie import SimpleCookie, CookieError
 try:
     import cStringIO as StringIO
 except ImportError:
     import StringIO
 import traceback, sys, string

 status_reasons = {
     100: 'Continue',
@@ -90,7 +86,6 @@
         self.status_reasons = "OK"
         self.response_headers = {}
         self.exc_info = None
-        self.cookies = SimpleCookie()
         # NEW -- sent records whether or not the headers have been send to the
         # client
         self.sent= False
@@ -111,36 +106,11 @@
         key=str(key)
         val=str(val)
         self.response_headers[key]=val
-    def set_cookie(self, key, value='', max_age=None, expires=None, path='/', domain=None, secure=None):
-        self.cookies[key] = value
-        self.response_headers['Set-Cookie'] = self.cookies
-        if max_age:
-            self.cookies[key]['max-age'] = max_age
-        if expires:
-            if isinstance(expires, str):
-                self.cookies[key]['expires'] = expires
-            elif isinstance(expires, datetime.datetime):
-                expires = expires.strftime('%a, %d %b %Y %H:%M:%S GMT')
-            else:
-                raise CookieError, 'expires must be a datetime object or a string'
-            self.cookies[key]['expires'] = expires
-        if path:
-            self.cookies[key]['path'] = path
-        if domain:
-            self.cookies[key]['domain'] = domain
-        if secure:
-            self.cookies[key]['secure'] = secure
-    def delete_cookie(self, key):
-        if self.cookies:
-            self.cookies[key] = ''
-        self.cookies[key]['max-age'] = "0"
+
     def __str__(self):
         res = "HTTP/1.1 %s %s\r\n" % (self.status_code, self.status_reasons)
         for key, val in self.response_headers.items():
-            if key.upper() != "SET-COOKIE":
-                res += '%s: %s\r\n' % (key,val)
-        if self.cookies:
-            res+=str(self.cookies)+"\r\n"
+            res += '%s: %s\r\n' % (key,val)
         res += "\r\n"
         return str(res)

Leave a Reply