Da documentação do php.net :
session_destroy - destrói todos os dados registrados para uma sessão
session_unset - Libera todas as variáveis de sessão
Minha pergunta de três partes é:
As duas funções parecem muito semelhantes.
Qual é realmente a diferença entre os dois?
Ambos parecem excluir todas as variáveis registradas em uma sessão. Algum deles realmente destrói a própria sessão? Se não, como fazer isso (destruir a própria sessão).
É correto que nenhuma das duas funções exclui o cookie de sessão no cliente?
fonte
local $_SESSION variable instance vs session data in the session storage
. Como eu sei, existem 1000 pessoas como eu que não entenderam o seu ponto. Obrigadosession_destroy();
está excluindo toda a sessão.session_unset();
apaga apenas as variáveis da sessão - a sessão ainda existe. Apenas os dados são truncados.fonte
Exemplo :
session_start(); session_destroy(); $a = "1234"; $_SESSION[a] = $a;
session_start(); session_unset(); $a = "1234"; $_SESSION[a] = $a;
Então, vou usar:
session_start(); session_destroy(); session_start(); $a = "1234"; $_SESSION[a] = $a;
fonte
session_unset();
você NÃO está fazendo nada, pois ainda pode usar a sessão de$_SESSION["a"]
, então para que serve?$_SESSION[a]
deve ser$_SESSION['a']
e ao contrário do que você disse, NÃO é NULO em seu primeiro exemplosession_unset()
irá limpar a$_SESSION
variável (como emarray()
), mas não afetará o arquivo da sessão. Mas quando o script termina; o estado do$_SESSION
será gravado no arquivo. Em seguida, ele limpará o arquivo, mas não o excluirá. Quando você o usasession_destroy()
, não vai tocar em$_SESSION
(Usarvar_dump($_SESSION)
depoissession_destroy()
), mas vai deletar o arquivo da sessão, então quando o script sair não haverá um arquivo para escrever o estado do$_SESSION
.fonte
Eu tentei usar o
session_unset($_SESSION['session_name'])
pensamento de que só removerá o nome de sessão específica ou individual / única. Mas o usosession_unset($_SESSION['session_name'])
irá apenas remover a definição de todos os nomes de sessão. O código certo a ser usado é apenasunset($_SESSION['session_name'])
se você deseja cancelar a definição de um único nome de sessão.fonte
session_destroy()
irá excluir a sessão após mover a página esession_unset()
irá excluir a sessão quando o código for executado.fonte
session_start (); # criará um array virtual (associativo) na memória em tempo real do navegador
dois itens adicionados
> $_SESSION['me'] = "Yadab"; > $_SESSION['you'] = "Avi"; > > print_r($_SESSION); #will give, array( "me"=>"Yadab", "you"=>"Avi" )
test1
> unset($_SESSION['me']); #only 'me' variable is removed fully (index & value) > print_r($_SESSION); #now the array is Array("you"=>"Avi")
test2
> session_destroy(); #will unset the values of all session variables, but indexes exists > print_r($_SESSION); #Output, Array("you"=>undefined) > #but some browser can store the value in cookies
test3
> session_unset(); #will unset all the main variables not only the values > print_r($_SESSION); #that means session array is now empty, like Array()
teste o bloco 1, 2 ou 3 individualmente, comentando os outros
fonte
Acho que session_destroy () e session_unset () devem ser usados ao mesmo tempo para garantir que os dados da sessão sejam apagados.
fonte
session_unset()
depoissession_destroy()
seria inútil. Usesession_unset()
para limpar todas as chaves e valores da superglobal $ _SESSION ou usesession_destroy()
para excluir a sessão inteira; não use ambos apenas para "ter certeza", confie na função para fazer seu trabalho.session_destroy()
não remove a variável superglobal da sessão até sair da página atual.