Introdução
Suporte a sessões no PHP consiste em uma forma de preservar certos dados
através de acessos subseqüentes. Isto te permite construir aplicações mais
personalizadas e aumenta a atração ao seu web site.
Se você está familiarizado com o gerenciamento de sessões do PHPLIB, você
irá notar que alguns conceitos são similares ao suporte de sessões do PHP.
Um visitante acessando seu web site está determinado por uma única id, a
então chamada id de sessão. Esta ou é guardada em um cookie do lado do usuário
ou está na URL.
Sessões te permite registrar arbitrariamente números de variáveis
para estarem lado a lado com os requerimentos. Quando um visitante
acessa seu site, o PHP checará automaticamente (se session.auto_start
está definida para 1) ou no seu pedido (explicitamente através da
session_start() ou implicitamente através da
session_register()) se uma id de sessão especifica
foi enviada com o pedido. Se este é o caso, o ambiente
anterior guardado é restaurado.
Todas as variáveis registradas são publicadas em série após o pedido
terminar. Variáveis registradas que estão indefinidas estão marcadas
como estando não definida. Num acesso subseqüente, estas não estarão
definidas pelo módulo da sessão a menos que o usuário defina elas mais tarde.
Nota:
Manipulação de sessões foi adicionado no PHP 4.0.
Requisitos
Nenhuma biblioteca externa é necessária para compilar esta extensão.
Instalação
Suporte a sessões esta habilitado no PHP 4.0 por definição. Se você
não gostaria de seu PHP com suporte a sessão, você
especifica a opção de configuração --disable-session.
Configuração durante execução
O sistema de suporte de sessão oferece no arquivo php.ini numerosas
opções de configuração. nós daremos um breve resumo.
session.save_handlerdefine o nome do operador(funções-handler)
que é usado para guardar e resgatar dados
associados com a sessão. Por definição
files.
session.save_path define o argumento que
que é passado para o save handler. Se você escolher o default files
handler, este é o caminho onde os arquivos serão criados.
Por definição para /tmp. Se a profundidade do caminho de
session.save_path é maior do que
2, coleção de lixo não será executada(garbage collection - gc).
| Atenção |
Se você deixar isto definido para um diretório muito visível, tal como
/tmp (o padrão), outros usuários do servidor
poderão ser capazes de assumir o controle da sessão obtendo a lista de arquivos
naquele diretório.
|
session.name especifica o nome da sessão
que é usada como nome de cookie. Ela poderia apenas conter
caracteres alfanuméricos. Por definição
PHPSESSID.
session.auto_start especifica se o módulo
da sessão inicia a sessão automaticamente num pedido na inicialização.
Por definição 0 (desabilitado).
session.cookie_lifetime especifica o tempo de vida
de um cookie em segundos que é enviado para o navegador. O valor 0
significa "até que o navegador seja fechado." Por definição
0.
session.serialize_handler define o nome
do operador(handler) que é usado para serializar/deserializar
dados. Correntemente, um formato interno do PHP (nome
php) e WDDX é suportado (nome
wddx). WDDX está apenas disponível, se o PHP
está compilado com o suporteWDDX
support. Por definição php.
session.gc_probability especifica a
probabilidade que a rotina gc (coleção de lixo-garbage collection) é
iniciada em cada pedido em porcentagem. Por definição 1.
session.gc_maxlifetime especifica o número
de segundos depois que o dado será visto como 'lixo' e
limpado.
session.referer_check contém a substring que você
quer checar cada HTTP Referer para. Se o Referer foi enviado pelo
cliente e a substring não foi encontrada, a id de sessão embutida
será percebida como inválida. Por definição uma string vazia.
session.entropy_file dá um caminho para um
recurso externo(file) que será usado como um entropy source
na criação da id de sessão. São exemplos
/dev/random ou
/dev/urandom que estão disponéveis em muitos
Sistemas Unix.
session.entropy_length especifíca o número
de bytes que serão lidos do arquivo especificado acima.
Por definição 0 (desabilitada).
session.use_cookies especifica se o
módulo usará cookies para gravar a id de sessão no lado
do cliente. Por definição 1 (habilitada).
session.use_only_cookies especifica se
o módulo usaráapenas cookies para
gravar a id de sessão no lado do cliente. Por definição
0 (desabilitada). Habilitar esta
definição previni ataques envolvendo id de sessão passadas em URLs.
Esta definição foi adicionada no PHP 4.3.0.
session.cookie_path especifica o caminho para
definir em session_cookie. Por definição /.
session.cookie_domain especifica o domínio para
para definir em session_cookie. Nenhuma definição.
session.cache_limiter especifica o método
de controle do cache para usar para páginas de sessão
(none/nocache/private/private_no_expire/public). Por definição
nocache.
session.cache_expire especifica o tempo de vida
para páginas de sessão no cache em minutos, isto não tem efeito para
para limitador sem cache. Por definição 180.
session.use_trans_sid se o suporte de sid transparente
está habilitado ou não, se habilitado por compilação com
--enable-trans-sid.
Por definição 1 (habilitado).
url_rewriter.tags especifica quais tags html estão
reescritas para incluir id de sessão se o suporte transparente de sid está habilitado.
Por definição a=href,area=href,frame=src,input=src,form=fakeentry
A configuração de track_vars e
register_globals
influencia em como as variáveis da sessão conseguem
armazenar e devolver.
Nota:
No PHP 4.0.3, track_vars está
sempre ligada.
Tipos Resource
Esta extensão não possui nenhum tipo resource.
Constantes Predefinidas
As contantes abaixo são definidas por esta extensão e somente
estarão disponíveis quando a extensão foi compilada com o PHP
ou carregada dinamicamente durante a execução.
- SID
(string)
Constantes contendo o nome da sessão e o ID da sessão
na forma de "name=ID" ou uma string
vazia no caso de o ID não tenha sido apropriadamente salvo em um cookie de seção.
Exemplos
Nota:
No PHP 4.1.0, $_SESSION está disponível como
variável global apenas como $_POST,
$_GET, $_REQUEST e assim por diante.
Não como $HTTP_SESSION_VARS,
$_SESSION está sempre global. Então,
global poderia não ser usada para
$_SESSION.
Se track_vars is
habilitada e register_globals
está desabilitada, apenas aquelas membros da matriz associativa
$HTTP_SESSION_VARS podem ser registradas em uma sessão
de variáveis. A sessão de variáveis restauradas somente estarão disponíveis
na matriz $HTTP_SESSION_VARS.
Exemplo 1.
Registrando uma variável com track_vars
habilitada
<?php
session_start();
if (isset($HTTP_SESSION_VARS['count'])) {
$HTTP_SESSION_VARS['count']++;
}
else {
$HTTP_SESSION_VARS['count'] = 0;
}
?> |
|
Uso de $_SESSION (ou
$HTTP_SESSION_VARS com PHP 4.0.6 ou inferior) é
recomendado por segurança e code readablity. Com
$_SESSION ou
$HTTP_SESSION_VARS, não á necessidade de usar
as funções session_register()/session_unregister()/session_is_registered().
Usuários podem acessar variável de sessão como uma variável normal.
Exemplo 2.
Registrando uma variável com $_SESSION.
<?php
session_start();
// Use $HTTP_SESSION_VARS with PHP 4.0.6 or less
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
} else {
$_SESSION['count']++;
}
?> |
|
Exemplo 3.
Desregistrando uma variável com $_SESSION.
<?php
session_start();
// Use $HTTP_SESSION_VARS with PHP 4.0.6 or less
unset($_SESSION['count']);
?> |
|
Se a register_globals
está habilitada, então todas as variáveis globais podem ser registradas como
variáveis de sessão e as variáveis de sessão serão restauradas para a variável
global correspondente. Visto que o PHP deve saber quais variáveis globais
estão registradas como variáveis de sessão, usuaários devem registrar variáveis
com a função session_register() enquanto
$HTTP_SESSION_VARS/$_SESSION
não necessita utilizar session_register().
Exemplo 4.
Registrando uma variável com register_globals
habilitada
<?php
if (!session_is_registered('count')) {
session_register("count");
$count = 0;
}
else {
$count++;
}
?> |
|
Se ambas track_vars e
register_globals
estão habilitadas, então as variáveis globais e as entradas
$HTTP_SESSION_VARS/$_SESSION
farão referência ao mesmo valor para as variáveis já registradas.
Se o usuário utiliza session_register() para registrar variável de sessão,
$HTTP_SESSION_VARS/$_SESSION
não terão esta variável numa matriz até que ela seja lida de um
armazém de sessão. (i.e. até o próximo pedido)
Passando a ID de sessão
Há dois métodos para propagar uma id de sessão:
Módulo de sessão suporta ambos os métodos. Cookies são mais eficientes, mas se
eles não estiverem autorizados (clientes não são obrigados a aceita-los),
nós não podemos conter deles. O segundo método inclui a id de sessão
diretamente na URL.
PHP é capaz de fazer isto transparentemente quando compilado com
--enable-trans-sid. Se você habilitar esta opção,
URIs ligadas serão automaticamente mudadas para conter a id
de sessão. Alternativamente, você pode usar a constante
SID que é definida, se o cliente não enviar
o cookie apropriado. SID é do
formulário session_name=session_id ou é uma string
vazia.
O seguinte exemplo demonstra como registrar uma variável, e
e como ligar corretamente a outra página usando SID.
Exemplo 5. Contar o número de visitas de um simples usuário <?php
if (!session_is_registered('count')) {
session_register('count');
$count = 1;
}
else {
$count++;
}
?>
Hello visitor, you have seen this page <?php echo $count; ?> times.<p>;
<?php
# the <?php echo SID?> (<?=SID?> can be used if short tag is enabled)
# is necessary to preserve the session id
# in the case that the user has disabled cookies
?>
To continue, <A href="modules.php?name=php_how_to&page=nextpage.php?<?php echo SID?>">click here</A> |
|
A <?=SID?> não é necessário, se
--enable-trans-sid foi usada para compilar o PHP.
Nota:
URLs não ligadas estão assumidas para apontar para sites externos e
portanto não anexam a SID, pois ela poderia escapar para outro servidor.
Session handlers customizáveis
Para implementar o armazenamento num banco de dados, ou qualque outra forma
de aramzenamento, você vai precisar usar session_set_save_handler()* para
define as funções de armazenamento que são usadas (* to create a set of
user-level storage functions).