我遇到了会话问题
在用户从下拉菜单中选择 smth 后,我必须将该值插入会话。我需要该值来获取模型中的身份验证表的数据库(如果我从 request.var 读取,当我进入登录/注册表单时它会崩溃)。我在哪里插入值在会话中以及如何(视图,控制器)。
现在我使用 cookie 解决了它,但它不是最安全的。
任何建议=
谢谢你
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 设置为主应用程序的名称。