2009-05-28 7 views
0

Hey ich habe eine Webseite zum Durchsuchen einer Datenbank. Ich möchte in der Lage sein, Cookies mit Python zu implementieren, um zu speichern, wonach ein Benutzer sucht, und ihnen bei der Rückkehr ein kürzlich gesuchtes Feld zur Verfügung zu stellen. Gibt es eine Möglichkeit, dies mit der Python-Cookie-Bibliothek zu implementieren?Verwenden von Cookies mit Python zum Speichern von Suchen

+0

Ja. Welches Web-Framework verwenden Sie? – nosklo

Antwort

1

Normalerweise machen wir folgendes.

  1. Verwenden Sie ein Framework.

  2. Eine Sitzung einrichten. Suchen Sie im Idealfall nach einem Benutzernamen. Wenn Sie nicht nach Namen oder irgendetwas fragen möchten, können Sie versuchen, die IP-Adresse des Browsers als Schlüssel für die Sitzung zu verwenden (dies kann zu einem Albtraum werden, aber Sie können es versuchen.)

  3. Verwenden der Sitzung Identifizierung (Benutzername oder IP-Adresse), speichern Sie die Suchen in einer Datenbank auf Ihrem Server.

  4. Wenn sich die Person erneut anmeldet, rufen Sie ihre Abfragedaten aus Ihrer lokalen Datenbank ab.

Moral der Geschichte. Traue dem Cookie nicht, etwas anderes zu haben als die Sitzungsidentifikation. Und selbst dann wird es entweder absichtlich oder versehentlich entführt.

  • Vorsätzliche Hijacking ist die Art, wie eine Person als eine andere aufwirft.

  • Das Entführen von Unfällen erfolgt, wenn mehrere Personen dieselbe IP-Adresse teilen (weil sie denselben Computer verwenden).

  • +0

    Einverstanden, außer Ihrer Anmerkung bezüglich versehentlicher Entführung. Benutzer, die die gleiche IP teilen (dh über einen Proxy/NAT), können sich nicht versehentlich gegenseitig entführen. Der Cookie wird mit jeder HTTP-Anfrage gesendet - die einzige Möglichkeit, IP-Adressen zu einem Problem zu machen, wäre in der Anwendung, die die Antwort verarbeitet. – Andru

    0

    Um Cookies zu verwenden, können Sie die API für Cookies verwenden, die Ihr Framework verwendet.

    Hier ist ein CherryPy voll funktionierendes Beispiel für das, was Sie wollen, speichern suchen und sie später.

    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:

    Es verwendet json die Liste und speichern sie in den Cookie als String serialisiert. Python json wurde in Python 2.6 eingeführt. Wenn Sie es also vor 2.6 benötigen, können Sie anstelle von 2.6 stattdessen simplejson verwenden, um das Beispiel auszuführen.

    Sorry über das HTML im Code. Das wäre idealerweise außerhalb des Codes, in einer Template-Datei, mit einer Template-Engine wie jinja2.

    Verwandte Themen