トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

E71:mod_pythonでcookieを使ってみる(2) のバックアップソース(No.1)

*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