跳转到内容

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 因此将其与主查询分开。

华夏公益教科书