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) > 0Diferenca de Static
- Static vars: compartilhada entre todas as threads do processo — vazamento entre usuarios
- FwSession: isolada por conexao — cada usuario tem a sua
- Static + lock: seguro mas complexo, com FwSession voce nao precisa
Exemplos
Cache na sessao
oSession := FwSession():new()
if !oSession:contains('dados')
oSession:set('dados', CarregaDados())
endif