Rebuild em aplicações e sites

Hoje conversando com um um profissional de web foi me perguntado:

Caso eu tenha um site com mais de um idioma, tomando que as urls sejam iguais, como faço para que ele dentro de uma parte do site, por exemplo a página institucional, o usuário clicar para mudar o idioma como faço para retornar para a página institucional ?

Por um momento pensei rápido e logo de cara respondi:

Guardar na session a página atual e quando for modificar o idioma é só recuperar o valor.

Porém lendo o livro Ruby on Rails do Urubatan ele menciona o cabeçalho HTTP_REFERER. Após uma pesquisa no pai verifiquei que existem ferramentas que passamos todos dias que se utilizam deste cabeçalho e nem percebemos: os localizadores dos blogs. Por exemplo: ao entrar em um blog apresenta a seguinta frase: “você veio do www.google.com.br”.

Fazendo um teste no PHP para ver os dados do cabeçalho percebi a veracidade da informação. Uma solução mais refinada e com melhor desempenho.

Outras funcionalidades: retaliar links indesejáveis, exposições de mensagens, manter o usuário no site logado, etc.

Leitura(s) complementar(es):

http://php.net/manual/pt_BR/reserved.variables.server.php

__PHP_Incomplete_Class e Zend Framework

Fazendo um projeto base de autenticação de usuário no PHP com Zend Framework me deparei com a seguinte questão:

Ao inserir um objeto em uma variável instanciada de Zend_Session_Namespace (ou seja, na session) e depois ao tentar acessar novamente a variável apresentava que o objeto é do Tipo __PHP_Incomplete_Class.

Fiz algumas pesquisas pela interner e encontrei um bom texto sobre o assunto no blog Tupi.

Resumindo: Ao tentar trazer o objeto da sessão pelo Zend é utilizado a função unserialize. Usando esta função e não tendo a classe incluida no seu escopo o PHP não reconhece o tipo do objeto e classifica assim.

Para resolver o problema o Bruno Viana menciona 2 características:

Uma solução para isso é utilizar o magic method __wakeup para requerir as classes necessárias para esse objeto desserializar sem problemas. Ou então certifique-se de que sua sessão está sendo iniciada depois dos require’s e include’s.

Particularmente eu fiz diferente. Utilizei uma função da própria classe que faz o mapeamento do objeto transformando em um array ( ->toArray() ).