E71:mod_pythonでcookieを使ってみる(2) のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- E71:mod_pythonでcookieを使ってみる(2) へ行く。
- 1 (2009-07-20 (月) 20:37:11)
E71:mod_pythonでcookieを使ってみる(2) †
さて、第2弾は、Cookie.MarshalCookie?を使ってみます。
Cookie.Cookieクラスとの大きな違いは、
- シークレットキーを使って、暗号化、復号をしてCookieの値を使う
- 1つのオブジェクトで複数の値を使える の2点です。
※MarshalCookie?を使わず、Cookie.Cookieで複数の値を使うサンプルは[[]]を参照
1個目の特徴としては、Cookieの偽装に対応できるってことです。(ユーザが保存したCookieを変造し、サーバに送信した際に、変造を発見することが出来ます。)
※詳しくは、mod_pythonのマニュアルを参照のこと
さてさて、ではサンプルを見てみましょう!
サンプルソースの内容は、前回(Cookie.Cookie)とほぼ同じで、
- id : 値を保持する
- counter : カウントアップする という2つの値をCookieで保持し、処理します。
作成するファイルは、同じく以下のとおり
- .htaccess
- mcookie.py の2つで、小生は「demo22_mcookie」ってディレクトリに格納してます。
.htaccess †
.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 †
同じく、内容は以下のとおり。
■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