XQuery/登录和注销
外观
< XQuery
您希望将用户登录到系统并将其注销。
我们将使用以下函数来创建登录和注销表单
xmldb:login($collection, $user, $password, true()) session:create() session:invalidate()
要登录,我们首先需要创建一个新会话,然后使用此会话来存储我们的登录信息
session:create() xmldb:login($collection, $user, $password, true())
这会更改执行当前查询的有效用户,并将该用户信息存储到 HTTP 会话中,因此同一会话中的后续查询也将使用相同的用户权限执行。请注意,您必须使用“true()”作为登录函数的第四个参数。
要注销用户,请使用
session:invalidate()
以及 session:clear 将删除会话中的用户绑定,这意味着对查询的下一个调用将作为访客运行。但是,正在执行的查询将继续使用旧的非访客用户,直到它完成。
(: if we are already logged in, are we logging out - i.e. set
permissions back to guest :)
if(request:get-parameter("logout",()))then
(
let $null := xdb:login("/db", "guest", "guest")
let $inval := session:invalidate()
return false()
)
else
(
(: we are already logged in and we are not the guest user :)
true()
)
在此示例中,我们同时调用 xdb:login() 作为访客和 session:invalidate()。我们希望同时执行这两项操作,清除未来查询的会话以及重置查询其余部分的当前用户。
您还可以通过更改 Jetty 配置文件来更改默认超时设置
$EXIST_HOME/tools/jetty/etc/webdefault.xml
默认情况下,配置文件将会话超时设置为 30 分钟
<session-config>
<session-timeout>30</session-timeout>
</session-config>
注意
将来可能会有 xmldb:logout 函数,它将这两个步骤结合起来。另一种方法是在控制器中处理登录/注销。xql 因此将其与主查询分开。