簡體   English   中英

在Python中使用Cookie來存儲搜索

[英]Using cookies with python to store searches

嘿,我有一個用於搜索數據庫的網頁。 我希望能夠使用python來實現cookie,以存儲用戶搜索的內容,並在用戶返回時為其提供最近搜索的字段。 有沒有一種方法可以使用python Cookie庫來實現?

通常,我們執行以下操作。

  1. 使用框架。

  2. 建立會議。 理想情況下,要求提供某種用戶名。 如果您不想輸入名稱或其他任何內容,可以嘗試使用瀏覽器的IP地址作為會話的密鑰(這可能會成為噩夢,但您可以嘗試。)

  3. 使用會話標識(用戶名或IP地址),將搜索保存在服務器上的數據庫中。

  4. 當該人再次登錄時,請從您的本地數據庫中檢索他們的查詢信息。

故事的道德啟示。 除了會話標識之外,不要相信Cookie有任何其他東西。 即使這樣,它還是有意或無意被劫持。

  • 故意劫持是一個人冒充他人的方式。

  • 當多個人共享相同的IP地址(因為他們共享同一台計算機)時,就會發生意外劫持。

要使用cookie,您可以使用框架使用的cookie的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()

筆記:

它使用json序列化列表並將其作為字符串存儲在cookie中。 Python json是在python 2.6中引入的,因此,如果在2.6之前需要它,那么如果沒有2.6,則可以使用simplejson來運行示例。

抱歉,代碼中的HTML。 理想情況下,使用諸如jinja2之類的模板引擎將其放在代碼之外的模板文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM