在Python中使用Cookies存储搜索记录
你好,我有一个网页是用来搜索数据库的。我想用Python来实现 cookies,这样可以记录用户搜索过的内容,当他们再次访问时,可以显示最近搜索的记录。请问有没有办法使用Python的Cookie库来实现这个功能呢?
2 个回答
0
要使用 cookies,你可以根据你所用的框架选择相应的 cookies 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 →" /></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
是在 2.6 版本中引入的,所以如果你使用的是 2.6 之前的版本,可以用 simplejson
来运行这个示例。
抱歉代码中有 HTML 部分。理想情况下,这些内容应该放在代码之外,使用像 jinja2 这样的模板引擎放在模板文件中。
1
通常,我们会这样做:
使用一个框架。
建立一个会话。理想情况下,询问用户的某种用户名。如果你不想问名字或者其他信息,可以尝试用浏览器的IP地址作为会话的标识(这可能会变得很麻烦,但你可以试试)。
利用会话标识(用户名或IP地址),把搜索记录保存在你服务器上的数据库里。
当这个人再次登录时,从你的本地数据库中获取他们的查询信息。
这个故事的教训是:不要指望cookie里有任何东西,除了会话标识。而且即使有,也可能会被恶意或意外地盗用。
恶意盗用是指一个人假装成另一个人。
意外盗用发生在多个用户共享同一个IP地址时(因为他们使用同一台电脑)。