Curso web2py

Sessions

Primeiro, entenda melhor o que é uma session (sessão): "uma session é uma estrutura de dados que uma aplicação utiliza para armazenar informações temporárias que só são úteis durante o tempo que um usuário está interagindo com a aplicação e, também, é específico para um usuário."

Você irá utilizar uma session quando quiser armazenar dados do usuário entre diferentes HTTP requests, porém para que esses dados não fiquem armazenados do lado do cliente (como cookies, parâmetros da URL, etc) e ele possa alterá-los da forma como bem entender, armazenará essas informações do lado do servidor.

Para maiores informações, acesse este artigo.

Dessa forma, no web2py, uma session terá a mesma estrutura que os objetos request e response: um tipo de dicionário que retorna None quando a chave pesquisada não existe.

session.user_is_admin = True

O objeto session possui três métodos importantes.


Método forget()

O que esse método faz é não salvar a session e seu uso é recomendado nas funções do controller que são frequentemente chamadas e não precisam registrar atividade do usuário. O método previne que o arquivo de sessão seja modificado.

session.forget()

Método secure()

O método secure() faz com que o cookie da session seja um cookie seguro e é uma configuração recomendada caso a aplicação utilize https. Configurando um cookie seguro, o servidor está pedindo para o browser não enviar o cookie de volta para o servidor a não ser que seja por uma conexão https.

session.secure()

Método connect()

O último método é o connect(). Por padrão, sessions são armazenadas no diretório de arquivos da aplicação e um cookie de sessão é utilizado para informar o id da session armazenada. Utilizando o método connect() é possível dizer ao web2py para armazenar sessions no banco de dados ou em cookies, eliminando a necessidade de acessar o diretório de arquivos.

Por exemplo, para armazenar sessions no banco de dados:

session.connect(request, response, db, masterapp=None)

db é o nome de uma conexão aberta ao banco de dados (como retornado pela DAL). Isso diz ao web2py que você deseja armazenar sessions no banco de dados e não no diretório de arquivos. session.connect precisa vir depois da declaração db=DAL(...), mas antes de qualquer outra lógica que requer sessions, como, por exemplo, o Auth.


Um uso comum para as sessions é o session.flash. Ele tem a mesma função que o response.flash, porém é utilizado antes de um redirect (redirecionamento). Fazemos isso porque, quando ocorre um redirecionamento, teremos novos request e response, podendo perder a informação passada. Dessa forma, armazenamos a mensagem em uma session. Ela sempre será exibida na primeira página aberta após sua definição, da seguinte maneira: o valor de session.flash será copiado para response.flash, exibido, e então session.flash será definido como None para que não seja exibido mais de uma vez. Nós também fizemos isso na definição de um formulário, confira novamente depois.

def redireciona_mensagem():
    session.flash = 'Fui redirecionado!'
    redirect(URL('index'))