TurboGears – Cookies 和 Sessions

通常需要将简单的浏览数据保存到用户的浏览器中。Sessions 是最常用的技术。Session 表示不需要以更持久的形式(如磁盘文件或数据库)存储的数据。

但是,TurboGears 中的 sessiondata 可以由文件系统、数据库或散列 cookie 值支持。少量的 session 数据通常保存在 cookie 中,但对于大量的 session 数据,则使用 MemCache。

MemCache 是系统级守护进程。它提供对缓存数据的快速访问,并且具有极高的可扩展性。但是,它仅供在安全服务器上使用,因此必须由系统管理员维护和保护。

会话管理中的 Beaker

TurboGears 使用 Beaker 进行会话管理。 gearbox 快速启动的项目默认配置为使用哈希 cookie 来存储会话数据。

每次客户端连接时,会话中间件 (Beaker) 将使用配置文件中定义的 cookie 名称检查 cookie。如果未找到 cookie,则会在浏览器中设置它。在所有后续访问中,中间件将找到 cookie 并使用它。

为了启用会话管理,应通过以下导入语句将会话类合并到项目中 −

from tg import session

要将数据保存在会话变量中 −

session['key'] = value
session.save()

要检索会话变量 −

return session['key']

请注意,您需要明确保存会话,以便将密钥存储在该会话中。

会话对象的 delete() 方法将删除所有用户会话 −

session.delete()

尽管通常不会删除任何给定生产环境中的所有用户会话,但您通常会在可用性或功能测试完成后进行清理。

下面给出了一个演示会话的简单示例。RootController 类有一个 setsession() 方法,用于设置会话变量。

from hello.lib.base import BaseController
from tg import expose, session
class RootController(BaseController):
   
   @expose()
   def setsession(self):
      session['user'] = 'MVL'
      session.save()
      
      str = "<b>sessionVariable set to "+session['user'] 
      str = str+"<br><a href = '/getsession'>click here to retrieve</a></b>"
      return str
   
   @expose()
   def getsession(self):
      return "<b>value of session variable retrieved " +session['user'] +"</b>"

输入 http://localhost:8080/setsession

Session

浏览器中的链接指向 http://localhost:8080/getsession,该链接检索并显示会话变量 −

Variable