*E71:mod_pythonでcookieを使ってみる(2) [#ldf871fb]
さて、第2弾は、Cookie.MarshalCookieを使ってみます。
Cookie.Cookieクラスとの大きな違いは、
+シークレットキーを使って、暗号化、復号をしてCookieの値を使う
+1つのオブジェクトで複数の値を使える
の2点です。
※MarshalCookieを使わず、Cookie.Cookieで複数の値を使うサンプルは[[]]を参照
1個目の特徴としては、Cookieの偽装に対応できるってことです。(ユーザが保存したCookieを変造し、サーバに送信した際に、変造を発見することが出来ます。)
※詳しくは、mod_pythonのマニュアルを参照のこと
-http://www.python.jp/doc/contrib/modpython/pyapi-cookie-classes.html
さてさて、ではサンプルを見てみましょう!
サンプルソースの内容は、前回(Cookie.Cookie)とほぼ同じで、
-id : 値を保持する
-counter : カウントアップする
という2つの値をCookieで保持し、処理します。
作成するファイルは、同じく以下のとおり
-.htaccess
-mcookie.py
の2つで、小生は「demo22_mcookie」ってディレクトリに格納してます。
***.htaccess [#h11ccc0a]
.htaccessの内容は以下のとおり。
■.htaccess
# setting Handler
SetHandler mod_python
# Add Python Handler
PythonHandler mcookie ←1
# Debug On
PythonDebug On
# Option OFF
Options None
※[[E71:mod_pythonでcookieを使ってみる(1)]]とまったく同じです笑 説明は割愛
***mcookie.py [#dd65b9d2]
同じく、内容は以下のとおり。
■mcookie.py
from mod_python import Cookie,apache
def handler(req):
ck = Cookie.get_cookies(req, \
Cookie.MarshalCookie, secret='seckey')
if not ck.has_key('count'):
values = {'counter':'0', 'id':'0001'}
ck = Cookie.MarshalCookie( \
'count', values, secret='seckey')
num = ck.value['counter']
id = ck.value['id']
message = \
'No sent MarshalCookie, \
so now create\n %s,%s' % (num, id)
Cookie.add_cookie(req, ck)
else:
countck = ck['count']
num = int(countck.value['counter'])\
+ 1
id = countck.value['id']
message = 'cookie is %s,%s' % \
(num,id)
values = {'counter':num, 'id':id}
mck = Cookie.MarshalCookie('count',\
values,secret='seckey')
Cookie.add_cookie(req, mck)
req.write("<html>\n<body>\n<h1>\n")
req.write(message)
req.write("\n</h1>\n</body>\n</html>\n")
return apache.OK