1

我遇到了会话问题

在用户从下拉菜单中选择 smth 后,我必须将该值插入会话。我需要该值来获取模型中的身份验证表的数据库(如果我从 request.var 读取,当我进入登录/注册表单时它会崩溃)。我在哪里插入值在会话中以及如何(视图,控制器)。

现在我使用 cookie 解决了它,但它不是最安全的。

任何建议=

谢谢你

4

1 回答 1

5

session 是 Storage 类的另一个实例。无论存储在会话中,例如:

session.myvariable = "hello"

可以稍后检索:

a = session.myvariable

换句话说,它已经存在 - 只需为其分配变量。如果您希望使用数据库,您必须通过模型在数据库中定义会话表。引用 web2py 手册:

例如在数据库中存储会话:

session.connect(request, response, db, masterapp=None)

其中 db 是打开的数据库连接的名称(由 DAL 返回)。它告诉 web2py 您要将会话存储在数据库中而不是文件系统中。session.connect 必须在 db=DAL(...) 之后,但在任何其他需要会话的逻辑之前,例如,设置 Auth。

web2py 创建一个表:

db.define_table('web2py_session',
             Field('locked', 'boolean', default=False),
             Field('client_ip'),
             Field('created_datetime', 'datetime', default=now),
             Field('modified_datetime', 'datetime'),
             Field('unique_key'),
             Field('session_data', 'text'))

并将 cPickled 会话存储在 session_data 字段中。

默认情况下,选项 masterapp=None 告诉 web2py 尝试在正在运行的应用程序中检索名称在 request.application 中的应用程序的现有会话。

如果您希望两个或多个应用程序共享会话,请将 masterapp 设置为主应用程序的名称。

于 2013-02-07T08:20:52.370 回答