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

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


E71:mod_pythonでcookieを使ってみる(2)

さて、第2弾は、Cookie.MarshalCookie?を使ってみます。

Cookie.Cookieクラスとの大きな違いは、

  1. シークレットキーを使って、暗号化、復号をしてCookieの値を使う
  2. 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