トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

E71:mod_pythonでcookieを使ってみる(1) の変更点

Top / E71:mod_pythonでcookieを使ってみる(1)

*E71:mod_pythonでcookieを使ってみる(1) [#gcb15992]

さてさて、mod_pythonでcookieを使ってみます。

sessionはあっさり使えたんですが、cookieのほうはだいぶ苦労しました笑

まあ、cookieって、名前も一般的な機能も知ってたけど、ちゃんと使うの初めてだったし、勉強になりました。

こちらのサンプルも、sessionと同じで、アクセスした回数をカウントアップするものです。

作成する対象のファイルは以下のとおり
+.htaccess
+cookie.py

2つのファイルを作成し、同じディレクトリに格納します。(小生は「demo21」というディレクトリ格納しております。)

***.htaccess [#ge47b9ab]
.htaccessの内容は以下のとおり。

■.htaccess
 # setting Handler 
 SetHandler mod_python
 # Add Python Handler
 PythonHandler cookie ←1
 # Debug On
 PythonDebug On
 # Option OFF
 Options None

+ハンドラーに「cookie」モジュールを指定します。

※小生は、sessionのサンプルを作成した時の.htaccesと同じファイルで、内容を書き換えてます。

***cookie.py [#gf5155a7]
同じく、内容は以下のとおり。

■cookie.py
 from mod_python import Cookie,apache
 def handler(req):
     ck = Cookie.get_cookies(req) ←1
     
     if not ck.has_key('counter'): ←2
         ck = Cookie.Cookie('counter','0') ←3
         message = \
         'No sent cookie, so now create\n %s' % ck ←4
         Cookie.add_cookie(req, ck) ←5
     else:
         tmp = int(ck['counter'].value) + 1 ←6
         
         ck = \
         Cookie.Cookie('counter',str(tmp)) ←7
         
         message = 'cookie is %s' % ck ←8
         Cookie.add_cookie(req, ck) ←9
             
     req.write("<html>\n<body>\n<h1>\n")
     req.write(message) ←10
     req.write("\n</h1>\n</body>\n</html>\n")
     return apache.OK
     


+apacheのリクエストオブジェクトを引き数にして、Cookieモジュールのget_cookies関数を実行し、リクエストに入っているcookieを取得します。
+Cookieクラスのhas_keyメソッドで、counter要素があるかを判定します。&br;
cookieにまだcounter要素が無い場合、3からの処理が、すでにある場合は6からの処理が実行されます。
+名前が「counter」、値が「0」のCookieクラスを生成し、ckに代入します。
+出力するメッセージを生成します。
+Cookieモジュールのadd_cookie関数を実行し、3.で作成したCookieオブジェクトをリクエストにセットします。
+クッキーからcounterの値を取り出し、1プラス(カウントアップ)します。(tmpに代入)
+名前が「counter」、値は6.でカウントアップした数値で、Cookieクラスを生成し、ckに代入します。
+出力するメッセージを生成します。
+Cookieモジュールのadd_cookie関数を実行し、7.で作成したCookieオブジェクトをリクエストにセットします。
+メッセージを出力します。



***動かしてみる [#baac34fb]

さてさて、資材を配置し、apacheを起動し、配置したURLにアクセスすると、このような画面が表示されます。

ちなみに、アクセスしたURLは「http://127.0.0.1/demo21/cookie」です。

&br;&br;
&ref(Screenshot0069.jpg);

&br;
あれ?出力された内容がファイルダウンロードになって、テキストエディタで表示されてる・・・&br;
もう一度アクセスすると、
&br;&br;
&ref(Screenshot0070.jpg);

&br;
うむ~、なぜだ???
&br;&br;

***動かしてみる2 [#o7235736]
色々試行錯誤した結果、原因はおいといて、とりあえず、URLの一番後ろに、「.html」をつけるとうまく表示されることがわかりました。

アクセスするURL:「http://127.0.0.1/demo21/cookie'''.html'''」

&br;&br;
&ref(Screenshot0071.jpg);

&br;おお、ちゃんと表示された!&br;
再度アクセスすると・・・&br;&br;
&ref(Screenshot0072.jpg);

&br;
ちゃんとカウントアップされている!

***原因の考察 [#ef020809]
状況証拠としては
-URLの指定で、最後に「.html」を入れるとちゃんとブラウザーで表示される
~(これができるのは、.htaccessのハンドラーの設定で拡張子を指定していないため)
-クッキーを使ってない場合は、「.html」が入ってなくてもちゃんとブラウザーで表示される。
-クッキーを使って、「.html」を入れないと、ファイルをダウンロードして、テキストエディターで表示される。

ってことがわかってます。

まあ、おそらく原因は、クッキーの使い方がいまいちなことなんでしょうけど・・・

まあ、そのうちわかるかな~

わかったら記事に追記します!