【问题标题】:What is the best way to store large session data in web applications?在 Web 应用程序中存储大型会话数据的最佳方式是什么?
【发布时间】:2013-05-29 17:01:00
【问题描述】:
我正在构建一个不需要人们登录但仍需要大量会话数据的网站。
示例:某人上传了一个 0.5 MB 的文件。我希望能够不时地操纵这个。我应该把它存放在哪里?我更喜欢cookie系统之类的东西,但显然这太小了。 Redis 似乎是一个机会,但我希望有更简单的东西。
我正在使用 Python 烧瓶。
提前致谢。
【问题讨论】:
标签:
javascript
python
html
web-applications
flask
【解决方案1】:
你有两个选择:
-
让此人将文件上传到服务器。在这种情况下,您不想将文件存储在会话中 - 相反,您将希望在他们的会话中存储对文件位置的引用(或者如果他们需要能够返回一个新的会话并且仍然使用旧文件)。
@app.route("/upload", methods=["GET", "POST"])
def upload_file():
# Create a folder in your uploads section to store
# this user's files.
# Store the file in it (use werkzeug.security.safe_join
# to ensure the file name is safe).
# Add the *safe* file name to the session
# or the datastore (e. g. a database)
# so you can look it up later
使用新的 DOM 文件系统 API 将文件存储在客户端,因此它们永远不会到达您的服务器并使用 JavaScript 操作文件。
第一种方法的优点是您可以存储大文件并使用许多不同的工具(不仅仅是 Python)来操作它们。缺点是您必须存储文件并确保清理文件名(以避免服务器被黑客入侵)。
第二种方法的优点是您不需要在服务器上存储任何东西(因此您不必为额外的存储付费)。缺点是您可以存储的数据量可能会受到限制,并且您只能访问在浏览器中运行的库(即仅限 JS)或您必须通过所有当您需要执行更复杂的操作时,将数据传输到您的服务器。