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
:
Manejo
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_handler
define
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
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
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
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
suporte
WDDX
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
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
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
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
session.cookie_path
especifica
o
caminho
para
definir
em
session_cookie
.
Por
definição
/
.
-
session.cookie_domain
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
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
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
.
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(
)
.
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
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
.
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
)
.