Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

zangoliers

Uso correto do Session Destroy

Recommended Posts

Bom dia a todos !

 

Estou com uma dúvida quanto ao uso correto do session destroy. Tenho uma página de administração do meu sistema, e gostaria de saber qual a forma de se usar o Session Destroy nesta página. Visto que ela só é acessada por autenticaçao, usuário+senha.

 

Segue o código:

CODE

<?php

include ("base.php");

@session_start();

if ($_SESSION['nome'] == true)

{

}

else

{

echo '<center><h3>ÁREA RESTRITA. Não autorizado!</h3></center>';

exit;

}

?>

<html>

<head>

<title>Página de Administrção do MENU</title>

</head>

 

<body bgcolor="#DFDFBF" link="#000000" alink="#000000" vlink="#000000">

 

<center>

<font style="tahoma" size="5">

<p align="center">

Administrador, você está em uma área restrita!

</p>

</font>

<table border="0" width="500">

<tr>

<td align="center" bgcolor="#C0C0FF">

<font style="tahoma" size="4">Menu do Administrador

</font>

</td>

</tr>

<tr>

<td bgcolor="#D0D0D0">

* <a href="admadministrador.php">Configurações do Administrador</a>

</td>

</tr>

<tr>

<td bgcolor="#D0D0D0">

* <a href="admpaginicial.php">Administração do Texto Nossa Empresa</a>

</td>

</tr>

<tr>

<td bgcolor="#D0D0D0">

* <a href="admfotosloja.php">Administração das Fotos da Loja</a>

</td>

</tr>

<tr>

<td bgcolor="#D0D0D0">

* <a href="admcadastros.php">Administração dos Cadastros</a>

</td>

</tr>

<tr>

<td bgcolor="#D0D0D0">

* <a href="admnoticias.php">Administração das Últimas Notícias</a>

</td>

</tr>

<tr>

<td bgcolor="#D0D0D0">

* <a href="admentregas.php">Administração do Texto e Fotos Entregas</a>

</td>

</tr>

<tr>

<td bgcolor="#D0D0D0">

* <a href="admgentregas.php">Administração do Texto das Garantias das Entregas</a>

</td>

</tr>

<tr>

<td bgcolor="#D0D0D0">

* <a href="admprodutos.php">Administração das Fotos dos Produtos</a>

</td>

</tr>

<tr>

<td bgcolor="#D0D0D0">

* <a href="admgprodutos.php">Administração do Texto das Garantias dos Produtos</a>

</td>

</tr>

<tr>

<td bgcolor="#D0D0D0">

* <a href="admgqualidade.php">Administração do Texto das Garantias de Qualidade dos Produtos</a>

</td>

</tr>

<tr>

<td bgcolor="#D0D0D0">

* <a href="admgprocedencias.php">Administração do Texto das Garantias das Procedências dos Produtos</a>

</td>

</tr>

<tr>

<td bgcolor="#D0D0D0">

* <a href="admparceiros.php">Administração das Fotos Parceiros</a>

</td>

</tr>

<tr>

<td bgcolor="#D0D0D0">

* <a href="admgvantagens.php">Administração do Texto das Vantagens de Tornar-se Parceiro</a>

</td>

</tr>

<tr>

<td bgcolor="#D0D0D0">

* <a href="admequipe.php">Administração das Fotos da Equipe</a>

</td>

</tr>

 

<p><br><center>

<a href="../index.php"><img src="img/btnsite.gif" border="0" alt="Voltar ao Site"></a>

</center>

 

</body>

</html>

 

Aonde devo colocarr o session destroy? como? devo fazer um header para retornar ao index após o Session Destroy? Pois estou apenas usando um link para retornar a pagina principal index.php.

Se puderem me mostrar onde colocar no meu código ficarei muito agradecido.

 

Bom final de semana a todos!

 

Agradecido desde já pela atenção dispensada;

 

Zangoliers

Compartilhar este post


Link para o post
Compartilhar em outros sites

a função session_destroy está em desuso

 

basta apenas resetar o sessão em questão assim como se faz com variáveis

 

unset( $_SESSION['nome'] );

 

 

para redirecionar, se estiver enviando cabeçalhos, evite o uso do header('location'),

 

faça uma saída para o html e escreva um redirect em javascript

location.href='local';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao contrario do que o utilizador hinom não concordo que a função session_destroy() esteja em desuso.

 

O unset() destroi a variavel mas nao a sessão, por isso destruir todas as variaveis NUNCA iria destruir a sessão existente ainda que se fizesse algo do genero:

 

unset($_SESSION);

 

Como tal aconselho a combinação de ambas:

 

unset($_SESSION);

session_destroy();

 

ou ainda...

 

session_unset();

session_destroy();

 

desta forma irá detruir ambas as variaveis de sessão e a própria sessão.

 

Espero ter sido útil

Abraço

 

Rui Torre

Compartilhar este post


Link para o post
Compartilhar em outros sites

$_SESSION é uma global, por isso não pode ser destruída

 

o uso correto com unset é identificando o índice

 

unset( $_SESSION['nomeDoIndice'] );

 

 

session_destroy não é recomendado devido a problemas de compatibilidade

 

durante um bom tempo muitos usuarios php tiveram que criar gambiarras como essa pra contornar o problema

 

function DeleteSessionID($sessionid) {

$orgpath = getcwd();

chdir(PHP_BINDIR);

chdir(session_save_path());

$path = realpath(getcwd()).'/';

if(file_exists($path.'sess_'.$sessionid)) {

// Delete it here

unlink($path.'sess_'.$sessionid);

} else {

// File not found

}

chdir($orgpath);

}

 

session_destroy() não reseta variáveis e sim apaga o cookie da sessão gerado no servidor.

 

um dos problemas que ocorria era devido a permissão no acesso à arquivos.

o erro consistia em impedir a exclusão do cookie por este estar em uso.

obviamente que o sistema operacional nao permitirá que um arquivo em uso seja excluído, por isso ocorria o erro.

 

 

dicas:

 

muitos usuarios php usam a função header para redirecionar uma página após destruir uma sessão.

isso causa um problema na escrita do cabeçalho, pois, para destruir uma sessão é necessário inicializá-la

 

session_start()

 

o session_start() escreve no cabeçalho do browser cliente, por isso entra em conflito com header() que também escreve um cabeçalho.

 

exemplo

 

<?php

session_start()

 

session_destroy();

 

header('location: pagina.php');

?>

nenhum erro será exibido na tela mas na maioria dos casos a sessão não será destruída

 

isso pode ser contornado fechando a escrita com session_write_close()

<?php

session_start()

 

session_destroy();

 

session_write_close();

 

header('location: pagina.php');

?>

 

por segurança, execute essas ações por meio de funções personalizadas

 

 

 

function apagarSessoes(){

 

session_destroy();

 

session_write_close();

 

}

desse modo podemos nos previnir quanto Às mudanças nas sintaxes da linguagem

 

 

<?php

session_start();

apagarSessoes();

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.