web2py将值插入会话

Yeb*_*ach 1 session web2py

我遇到会话问题

用户从下拉菜单中选择smth后,我必须将该值插入会话.我需要该值来获取模型中auth表的数据库(如果我从request.var读取,它会在登录/注册表单时崩溃).我在哪里插入会话中的值以及如何(view,controler).

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

任何建议=

谢谢

Dro*_*out 5

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

session.myvariable = "hello"
Run Code Online (Sandbox Code Playgroud)

可以在以后检索:

a = session.myvariable
Run Code Online (Sandbox Code Playgroud)

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

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

session.connect(request, response, db, masterapp=None)
Run Code Online (Sandbox Code Playgroud)

其中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'))
Run Code Online (Sandbox Code Playgroud)

并在session_data字段中存储cPickled会话.

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

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