使用cookies和python存储搜索

使用cookies和python存储搜索,python,cookies,Python,Cookies,嘿,我有一个搜索数据库的网页。我希望能够使用python实现cookies来存储用户搜索的内容,并在用户返回时为他们提供最近搜索的字段。有没有一种方法可以使用python Cookie库来实现这一点???通常,我们会执行以下操作 使用框架 建立一个会议。理想情况下,要求提供某种用户名。如果您不想询问姓名或其他信息,可以尝试将浏览器的IP地址作为会话的密钥(这可能会变成一场噩梦,但您可以尝试一下) 使用会话标识(用户名或IP地址),将搜索保存在服务器上的数据库中 当此人再次登录时,从本地数据库检索

嘿,我有一个搜索数据库的网页。我希望能够使用python实现cookies来存储用户搜索的内容,并在用户返回时为他们提供最近搜索的字段。有没有一种方法可以使用python Cookie库来实现这一点???

通常,我们会执行以下操作

  • 使用框架

  • 建立一个会议。理想情况下,要求提供某种用户名。如果您不想询问姓名或其他信息,可以尝试将浏览器的IP地址作为会话的密钥(这可能会变成一场噩梦,但您可以尝试一下)

  • 使用会话标识(用户名或IP地址),将搜索保存在服务器上的数据库中

  • 当此人再次登录时,从本地数据库检索其查询信息

  • 这个故事的寓意。不要相信cookie除了会话标识之外还有其他内容。即便如此,它也会被故意或意外劫持

    • 故意劫持是一个人冒充另一个人的方式

    • 当多人共享同一IP地址(因为他们共享同一台计算机)时,就会发生意外劫持


    要使用cookie,您可以使用框架使用的cookie API

    下面是一个完整的工作示例,用于执行您想要的操作、存储搜索并在以后提供它们

    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()
    
    import cherrypy
    导入json
    类根(对象):
    def索引(自):
    last_search=cherrypy.request.cookie.get('terms',None)
    如果上次搜索:
    last_search=','.join(json.loads(last_search.value))
    其他:
    上次搜索='无'
    返回“”
    搜寻
    搜寻
    请键入您的搜索词:
    

    提示:最后5个使用的术语:%s

    “%”(上次搜索,) index.exposed=True def do_搜索(自我,查询): 结果=['some','results','here','simulating','a','search'] 打印cherrypy.request.cookie last_search=cherrypy.request.cookie.get('terms',None) 如果上次搜索: last_search=json.load(last_search.value)[-4:]#获取last 4 其他: 上次搜索=[] 最后一次搜索。追加(查询)#追加新术语 cherrypy.response.cookie['terms']=json.dumps(最后一次搜索) 返回“” 搜寻 %r的搜索结果 %

    “%”(查询“,”.join(结果),cherrypy.url(“/”) do_search.exposed=True application=cherrypy.tree.mount(根(),“/”) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': cherrypy.quickstart()
    注:

    它使用序列化列表并将其作为字符串存储在cookie中。Python
    json
    是在Python2.6中引入的,因此如果您在2.6之前需要它,那么如果您没有2.6,您可以使用它来运行示例


    很抱歉代码中的HTML。这最好是在代码之外,在模板文件中,使用jinja2之类的模板引擎。

    是的。您使用的是哪种web框架?同意,但您关于意外劫持的说明除外。共享相同IP(即通过代理/NAT)的用户不会意外地劫持彼此。cookie与每个http请求一起发送-IP地址成为问题的唯一方式是在处理响应的应用程序中。