2009-05-28 56 views
0

ちょっと、データベースを検索するためのウェブページがあります。私はPythonを使用してクッキーを実装して、ユーザーが何を検索するのかを保存し、戻ったときに最近検索されたフィールドを提供できるようにしたいと考えています。 Python Cookieライブラリを使用してこれを実装する方法はありますか?Pythonでクッキーを使って検索を保存する

+0

はい。どのWebフレームワークを使用していますか? – nosklo

答えて

1

通常、次の操作を行います。

  1. フレームワークを使用します。

  2. セッションを確立します。理想的には、ある種のユーザー名を要求してください。名前や何かを尋ねたくない場合は、ブラウザのIPアドレスをセッションのキーとして試してみてください(これは悪夢に変わりますが、試してみてください)。

  3. セッションの使用ID(ユーザ名またはIPアドレス)を入力して、サーバ上のデータベースに検索結果を保存します。

  4. ユーザーが再度ログインすると、ローカルデータベースからクエリ情報を取得します。

ストーリーのモラル。クッキーにはセッションID以外は何も持たないと信じてはいけません。そしてそれでも、それは意図的にまたは偶発的にハイジャックされるでしょう。

  • 意図的ハイジャックは、1人が別のものとしてポーズする方法です。

  • 複数の人が(同じコンピュータを共有しているため)複数の人が同じIPアドレスを共有すると、事故ハイジャックが発生します。

+0

偶発的なハイジャックに関する注意を除き、同意。同じIPを共有する(すなわち、プロキシ/ NATを介して)ユーザは、誤って互いを乗っ取ることはできません。 Cookieはすべてのhttp要求とともに送信されます.IPアドレスが問題になる唯一の方法は、応答を処理するアプリケーション内に存在します。 – Andru

0

クッキーを使用するには、あなたのフレームワークが使用しているクッキー用のAPIを使用できます。

ここには、あなたが望むことを実行し、検索結果を保存し、後で提供するための完全な実例が掲載されています(CherryPy)。

import cherrypy 
import json 

class Root(object): 
    def index(self): 
     last_search = cherrypy.request.cookie.get('terms', None) 
     if last_search: 
      last_search = ','.join(json.loads(last_search.value)) 
     else: 
      last_search = 'None' 
     return """ 
<html> 
<head> 
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
    <title>Search</title> 
</head> 
<body> 
    <h1>Search</h1> 
    <form action="do_search" method="get"> 
     <p>Please type your search terms: 
     <input type="text" name="query" /></p> 
     <p>Hint: Last 5 used terms: %s</p> 
     <p><input type="submit" value="Search &rarr;" /></p> 
    </form> 
</body> 
""" % (last_search,) 
    index.exposed = True 

    def do_search(self, query): 
     results = ['some', 'results', 'here', 'simulating', 'a', 'search'] 
     print cherrypy.request.cookie 
     last_search = cherrypy.request.cookie.get('terms', None) 
     if last_search: 
      last_search = json.loads(last_search.value)[-4:] # get last 4 
     else: 
      last_search = [] 
     last_search.append(query) # append new term 
     cherrypy.response.cookie['terms'] = json.dumps(last_search) 
     return """ 
<html> 
<head> 
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
    <title>Search</title> 
</head> 
<body> 
    <h1>Search Results for %r</h1> 
    <p>%s</p> 
    <p><a href="%s">click here to search again</a> 
    </p> 
</body> 
""" % (query, ', '.join(results), cherrypy.url('/')) 
    do_search.exposed = True 

application = cherrypy.tree.mount(Root(), '/') 

if __name__ == '__main__': 
    cherrypy.quickstart() 

NOTES:

それはリストをシリアル化し、文字列としてクッキーに保存するjsonを使用しています。 Python jsonはPython 2.6で導入されました。2.6より前に必要な場合は、代わりにsimplejsonを使用して2.6を使用してください。

コード内のHTMLについては申し訳ありません。理想的には、jinja2のようなテンプレートエンジンを使用して、テンプレートファイル内のコード外にあることになります。

関連する問題