FwSession

Gerencia estado de sessao por thread/conexao. Substitui PUBLIC vars que vazam entre rotinas. Thread-safe e isolado por usuario.

Assinatura: FwSession():new() -> oSession

Retorna: object

FwSession guarda dados de sessao por thread/conexao do Protheus. Resolve o problema classico de PUBLIC vars vazando entre rotinas paralelas.

Sintaxe

local oSession as object
oSession := FwSession():new()

// Set
oSession:set('user_id',     cUserId)
oSession:set('empresa',     cEmpresa)
oSession:set('permissoes',  aPermsArray)

// Get
cUserId := oSession:get('user_id')

// Exists
if oSession:contains('cache_clientes')
    aClientes := oSession:get('cache_clientes')
else
    aClientes := CarregaClientes()
    oSession:set('cache_clientes', aClientes)
endif

// Remove
oSession:remove('cache_temp')

// Clear (limpa tudo da sessao)
oSession:clear()

Caso de uso: cache de permissoes

function PodeAcessar(cFuncao)
    local oSession as object
    local aPerms   as array

    oSession := FwSession():new()
    if !oSession:contains('perms')
        // primeira vez na sessao: busca do banco
        aPerms := CarregaPermissoes(RetCodUsr())
        oSession:set('perms', aPerms)
    endif
    aPerms := oSession:get('perms')
return aScan(aPerms, cFuncao) > 0

Diferenca de Static

Exemplos

Cache na sessao

oSession := FwSession():new()
if !oSession:contains('dados')
    oSession:set('dados', CarregaDados())
endif

Veja também