request.getSession(false)的作用是什么?

1 grails java-ee

我目前正在《 Grails in Action》一书中,其中作者在TagLib类下编写了一个名为loginToggle的自定义标签。

我不太明白这request.getSession(false)是为了什么

def loginToggle = {
    out << "<div style='margin: 15px 0 40px;'>"
    if (request.getSession(false) && session.user){
        out << "<span style='float:left; margin-left: 15px'>"
        out << "Welcome ${session.user}."
        out << "</span><span style='float:right;margin-right:15px'>"
        out << "<a href='${createLink(controller:'brewUser', action:'logout')}'>"
        out << "Logout </a></span>"
    } 
    else{
        out << "<span style='float:right;margin-right:10px'>"
        out << "<a href='${createLink(controller:'brewUser', action:'login')}'>"
        out << "Login </a></span>"
    }
    out << "</div><br/>"
}
Run Code Online (Sandbox Code Playgroud)

伟大的书BTW

cfr*_*ick 5

上面的代码意味着,如果有一个会话(但不创建一个会话)并且包含一个用户。

检查文档:

HttpSession getSession(boolean create)

返回与此请求关联的当前HttpSession;如果没有当前会话且create为true,则返回一个新会话。

如果create为false且请求没有有效的HttpSession,则此方法返回null。

为确保正确维护会话,必须在提交响应之前调用此方法。如果容器使用cookie来维护会话的完整性,并且在响应提交后被要求创建新的会话,则抛出IllegalStateException。

参数:

create-必要时为该请求创建一个新的会话;如果没有当前会话,则返回false

返回值:

与此请求关联的HttpSession;如果create为false并且请求没有有效的会话,则为null

也可以看看:

getSession()