【问题标题】:Why CherryPy session does not require a secret key?为什么 CherryPy 会话不需要密钥?
【发布时间】:2011-10-06 20:04:51
【问题描述】:
【问题讨论】:
标签:
python
pylons
web-frameworks
cherrypy
【解决方案1】:
基本上有两种不同的方式来维护会话状态:在服务器上或在客户端。
使用服务器端方法,您将会话数据保存在文件、数据库或服务器内存中,并为其分配一个 ID。然后这个会话 id 被发送到客户端并通常存储在一个 cookie 中(尽管它们也可以嵌入在 URL 中)。然后对于每个请求,客户端的会话 ID 被 Web 应用程序读取并用于从存储在服务器上的任何位置加载会话数据。这样,客户端永远无法访问任何会话数据,也无法篡改它,但缺点是您必须通过恶意客户端使用过时的会话 ID 来防止会话劫持。这是当今大多数 Web 框架和应用程序使用的模型。
另一种方法是将会话数据完全存储在客户端的 cookie 中。这种方法的缺点是客户端可以看到和篡改数据,因此您必须注意正确签署和加密数据以防止篡改。这就是拥有一个好的密钥发挥作用的地方。好处是您也不必担心会话劫持。
Pylons 使用 Beaker 会话,可以将其配置为完全存储会话数据on the client side。这就是您需要密钥的原因。
CherryPy 只在服务器上存储会话数据,然后向用户发送带有会话 id 的 cookie,因此客户端永远看不到会话数据,也无法篡改它。您可以将其配置为使用文件或仅将所有内容保存在内存中。您甚至可以连接到它并使用数据库来存储会话数据。
就个人而言,我更喜欢 CherryPy 使用的方法,因为它与大多数网络使用的方法相同。它更易于保护,您可以轻松地与服务器上运行的其他应用程序共享会话数据,而无需担心加密或密钥。