O componente Session do CakePHP oferece uma maneira de persistir dados do cliente entre requisições de páginas. Este componente funciona como um encapsulador para a variável $_SESSION além de oferecer métodos de conveniência para diversas funções relacionadas ao $_SESSION.
Sessões podem ser persistidas de diferentes maneiras. O padrão é usar as configurações definidas pelo PHP; no entanto existem outras opções.
Salva os arquivos de sessão do diretório tmp/sessions de sua aplicação.
Utiliza sessões da base de dados do CakePHP.
Utiliza o mecanismo de cache configurado em Cache::config(). Muito útil para ser usado em conjunto com o Memcache (em ambientes servindo múltiplas aplicações) para armazenar tanto dados em cache quanto dados de sessões.
A configuração padrão. Salva os arquivos de sessão conforme definido no php.ini.
Para modificar o método padrão de manipulação de sessões, altere a configuração de Session.save para refletir a opção de sua preferência. Se você escolher “database”, você deveria também descomentar as configurações de Session.database e rodar o arquivo de script SQL localizado em app/config.
Para usar uma configuração personalizada, defina o valor de Session.save para um nome de um arquivo. O CakePHP vai considerar este arquivo informado no diretório CONFIGS.
// app/config/core.php
Configure::write('Session.save','my_session');
Isto permite que você personalize a manipulação de sessões.
// app/config/my_session.php
//
// Reverte o valor e força checagem do referrer mesmo quando
// Security.level for medium
ini_restore('session.referer_check');
ini_set('session.use_trans_sid', 0);
ini_set('session.name', Configure::read('Session.cookie'));
// Cookies agora são destruídos quando o navegador é fechado,
// não persiste a informação por dias e é o padrão para nível
// de segurança em low ou medium
ini_set('session.cookie_lifetime', 0);
// Cookie path agora é '/', mesmo se sua aplicação estiver
// em um subdiretório no domínio
$this->path = '/';
ini_set('session.cookie_path', $this->path);
// Cookies de sessão agora são persistidos para todos
// os subdomínios
ini_set('session.cookie_domain', env('HTTP_BASE'));
O componente Session é usado para interagir com as informações na sessão. Ele inclui funções CRUD básicas bem como recursos para criação de mensagens de feedback para os usuários.
Deve-se notar que estruturas de array podem ser criadas na sessão utilizando-se a notação de ponto. Assim, User.username deve referenciar a seguinte estrutura:
array('User' =>
array('username' => '[email protected]')
);
Pontos são usados para indicar arrays dentro de arrays. Esta notação pode ser usada para todos os métodos do componente Session onde $name for usado.
write($name, $value)
Escreve na sessão, atribuindo $value para $name. $name pode referenciar um array na notação de ponto. Por exemplo:
$this->Session->write('Person.eyeColor', 'Green');
Isto escrever o valor “Green” na chave de sessão sob Person => eyeColor.
setFlash($message, $layout = 'default', $params = array(), $key = 'flash')
Usado para definir uma variável de sessão que pode ser usada para
exibição na view. O parâmtro $layout lhe permite selecionar o layout
(presente em /app/views/layouts
) a ser usado para renderizar a
mensagem. Se você mantiver $layout
como “default”, a mensagem será
encapsulada da seguinte maneira:
<div id="flashMessage" class="message"> [message] </div>
$params lhe permite passar variáveis adicionais para a view para o layout renderizado. $key atribui o índice de $messages no array Message. Seu valor padrão é “flash”.
Podem ser passados parâmetros que afetem a div renderizada, por exemplo,
incluir uma chave «class» no array $params irá aplicar aquela classe à
div
de saída usando $session->flash()
em seu layout ou view.
$this->Session->setFlash('Texto de uma mensagem de exemplo', 'default', array('class' => 'example_class'))
A saída ao usar $session->flash()
com o código de exemplo acima será
algo como:
<div id="flashMessage" class="example_class">Texto de uma mensagem de exemplo</div>
read($name)
Retorna o valor armazenado em $name na sessão. Se $name for null, os valores de toda a sessão seráo retornado. P.ex.:
$green = $this->Session->read('Person.eyeColor');
Retorna o valor Green a partir da sessão.
check($name)
Usado para verificar se a variável de sessão está definida. Retorna true se a variável dada existir e false em caso contrário.
delete($name) /*or*/ del($name)
Limpa o valor da sessão data em $name. Ex.
$this->Session->del('Pessoa.CorDoOlho');
Sua sessão não contém o valor “Verde”, ou CorDoOlho não está definida. No entanto, a Pessoa existe na sessão. Para deletar a informação da Pessoa completa da sessão use.
$this->Session->del('Pessoa');
O método destroy
irá excluir o cookie de sessão e todos os dados
armazenados no sistema de arquivo temporário. Este método vai destruir a
sessão PHP e então criar uma nova sessão limpa.
$this->Session->destroy()
error()
Usado para determinar o último erro na sessão.