【问题标题】: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 烧瓶。

提前致谢。

【问题讨论】:

  • Redis 非常简单。我在我正在运行的应用程序中使用它,除了一些奇怪(github.com/andymccurdy/redis-py)之外,它工作得很好。但是我不明白为什么应该将文件保留在会话中。有什么特别的原因吗?

标签: 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)您必须通过所有当您需要执行更复杂的操作时,将数据传输到您的服务器。

【讨论】:

    【解决方案2】:

    你应该试试 localstorage 。

    【讨论】:

      【解决方案3】:

      您可能需要memcached。它比 Redis 更简单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多