TurboGears - Cookies e Sessões

Freqüentemente, é necessário manter dados de navegação simples anexados ao navegador do usuário. As sessões são a técnica mais comumente usada. A sessão representa os dados que não precisam ser armazenados de uma forma mais persistente, como arquivo de disco ou banco de dados.

No entanto, os dados da sessão no TurboGears podem ser apoiados pelo sistema de arquivos, banco de dados ou valores de cookies com hash. Uma pequena quantidade de dados de sessão geralmente é mantida em cookies, mas para o maior volume de dados de sessão, MemCache é usado.

MemCache é um daemon no nível do sistema. Ele fornece acesso rápido aos dados armazenados em cache e é extremamente escalonável. No entanto, ele deve ser usado apenas em servidores seguros e, portanto, deve ser mantido e protegido pelo administrador de sistemas.

Copo no gerenciamento de sessão

O TurboGears usa o Beaker para gerenciamento de sessão. Um projeto de início rápido por caixa de engrenagens é, por padrão, configurado para usar cookies com hash para armazenar dados da sessão.

Cada vez que um cliente se conecta, o middleware de sessão (Beaker) inspeciona o cookie usando o nome do cookie, que foi definido no arquivo de configuração. Se o cookie não for encontrado, ele será definido no navegador. Em todas as visitas subsequentes, o middleware encontrará o cookie e fará uso dele.

A fim de habilitar o gerenciamento de sessão, a classe de sessão deve ser incorporada ao projeto seguindo a instrução de importação -

from tg import session

Para salvar os dados em uma variável de sessão -

session[‘key’] = value
session.save()

Para recuperar a variável de sessão -

return session[‘key’]

Observe que você precisa salvar explicitamente a sessão para que suas chaves sejam armazenadas nessa sessão.

o delete() método do objeto de sessão irá apagar todas as sessões do usuário -

session.delete()

Mesmo que não seja comum excluir todas as sessões de usuário em qualquer ambiente de produção, você normalmente fará isso para limpeza após a execução dos testes de usabilidade ou funcional.

A seguir, é fornecido um exemplo simples para demonstrar as sessões. A classe RootController tem umsetsession() método que define uma variável de sessão.

from hello.lib.base import BaseController
from tg import expose, session
class RootController(BaseController):
   
   @expose()
   def setsession(self):
      session['user'] = 'MVL'
      session.save()
      
      str = "<b>sessionVariable set to "+session['user'] 
      str = str+"<br><a href = '/getsession'>click here to retrieve</a></b>"
      return str
   
   @expose()
   def getsession(self):
      return "<b>value of session variable retrieved " +session['user'] +"</b>"

Entrar http://localhost:8080/setsession

Um link no navegador leva a http://localhost:8080/getsession que recupera e exibe a variável de sessão -