XCIII . Manejo de sessões

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 .



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 .

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 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 .




Exemplo 3 . Desregistrando uma variável com $_SESSION .






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( ) .

Cuidado

Se você está usando $HTTP_SESSION_VARS / $_SESSION e desabilitada register_globals , não faça uso de session_register( ) , session_is_registered( ) e session_unregister( ) .

Se você habilita register_globals , session_unregister( ) Se você habilita register_globals , session_unregister( ) poderiam ser usadas desde que as variáveis de sessão estejam registradas como variáveis globais quando os dados da sessão não estão em série . Desabilitar register_globals é recomendado para ambas razões , segurança e performance .

Exemplo 4 . Registrando uma variável com register_globals habilitada






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 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

dois métodos para propagar uma id de sessão :

  • Parâmetro URL



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 .

Nota : A diretriz arg_separator.output php.ini permite personalizar o argumento separador .



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





 
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="

 
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 .

Índice
session_cache_expire -- Retorna o prazo do cache atual
session_cache_limiter -- Obtém e/ou define o limitador do cache atual
session_decode -- Decifra dado de sessão de uma string
session_destroy -- Destrói todos os dados registrados para uma sessão
session_encode -- Codifica os dados da sessão atual como uma string
session_get_cookie_params -- Obtém os parâmetros do cookie da sessão
session_id -- Obtém e/ou define a id da sessão atual
session_is_registered -- Descobre se uma variável está registrada numa sessão
session_module_name -- Obtém e/ou define o módulo da sessão atual
session_name -- Obtém e/ou define o nome da sessão atual
session_readonly -- Início da sessão - reinicia variáveis congeladas, mas sem escrever de volta no fim da requisição
session_register -- Registrar uma ou mais variáveis na sessão atual
session_save_path -- Obtém e/ou define o save path da sessão atual
session_set_cookie_params -- Define os parâmetros do cookie de sessão
session_set_save_handler -- Define a sequência de funções de armazenamento
session_start -- Inicia dados de sessão
session_unregister -- Desregistra variável da sessão atual
session_unset -- Liberta todas as variáveis de sessão
session_write_close -- Escreve dados de sessão e termina a sessão