FAPWS3でSet-Cookieが出来ないっていう
今日は残ってる仕事をしに会社に行ったはずが、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)