Ir para conteúdo

POWERED BY:

Arquivado

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

klawdyo

Erro em página protegida com SESSION

Recommended Posts

Tenho uma série de páginas (que deveriam ser) protegidas com sessões... Ela funcionam perfeitamente no localhost, mas quando eu subo os arquivos para o servidor, qualquer pessoa consegue acessá-las normalmente, sem estar logado.

Eu uso o seguinte código:

function verifica_session()	{		session_start();		if(!$_SESSION["email"] and !$_SESSION["senha"])		{			header("location: index.php");		}	}

Se as variáveis não estiverem registradas, redireciona para a página index.php.

 

Porque só funciona no localhost? Onde eu estou errando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

me parece que você só está verificando se o email e senha foram inseridos, mas nao está autenticando, pode ser isso. se nao for posta o código de registro da sessão pra gente vevlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí vai minha página de login:

PHP
<?php

        //inicio a sessão

        session_start();

 

        //include da conexão com o banco.

        require "headers.php";

        conecta();

        header("Content-type: text/html; charset=iso-8859-1")// Header

       

        //recebo as variáveis.

         $email = addslashes($_POST["txtEmail"]);

         $senha = addslashes($_POST["txtSenha"]);

       

        $erro=0;

       

        // verifico se o email foi preenchido

        if(empty($email)){$erro +=1;}

       

        //verifico se a senha foi preenchida

        if(empty($senha)){$erro +=2;}

       

        // agora verifico se ocorreu erro ou não.

        if($erro !=0){

                header("location:index.php?err_login=". $erro);

        }

        else

        {            //se não ocorreu erro

                $sql = mysql_query("SELECT * FROM usuarios WHERE email='$email' AND senha='".md5($senha)."'");

                $rows = mysql_num_rows($sql);

                if($rows!=0)

                {

                        while($mostra = mysql_fetch_array($sql))

                        {

                                //crio as sessoes

                                $_SESSION["email"] = $email; //sessão do usuario

                                $_SESSION["senha"] = $senha; //crio a sessão da senha

                                $_SESSION["token"] = $mostra[cod_confirmacao]; //crio a sessão do token

 

 

                                //atualizando as informações dos últimos acessos

                                mysql_query("UPDATE usuarios SET ultimo_acesso='".date("Y-m-d H:i:s")."'  

                                                        WHERE email='".$_SESSION[email]."'") or die (mysql_error());

 

                        }

                        //redireciono para a pagina padrão se o login não for feito pelo ajax

                        header("location:inicio.php");                 

                }//fecho o if

                else

                {

                        //se o usuário ou a senha estiverem errados, o SELECT acima não irá retornar nenhum valor

                        //volta para a pagina se o login não for feito pelo ajax

                        header("location:index.php?err_login=4");

                        exit;

                }//fecho o else da consulta

        }//fecho o else de verificação

       

//      mysql_close($con);

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é isso...

Veja só

O login acontece legal. As sessões são salvas normalmente.

PHP
function verifica_session()

    {

        session_start();

        if(!$_SESSION["email"] and !$_SESSION["senha"])

        {

            header("Location: index.php");

            echo "não logado";   // mostra essa frase se não estiver logado

            exit;

        }

    }

 

 

Eu fiz as alterações acima, acrescentei

PHP
echo "não logado";   // mostra essa frase se não estiver logado

   exit;

 

Sempre que eu tento acessar as páginas protegidas só aparece a frase "não logado".

O problema é que não tá acontecendo o redirecionamento com o Header.

 

Só que o Header só não funciona nessa função específica. Pois a função sair(), que fica logo abaixo dela tá funcionando normal.

 

Eu to me descabelando aqui.. Com certeza esse erro é uma bobagem enorme q tá bem debaixo do meu nariz e eu nao to vendo.. eu to endoidando

 

obs.: não existe nenhuma saída html antes do header.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim...

 

function verifica_session()	{		session_start();		if(!$_SESSION["email"] and !$_SESSION["senha"])		{			header("Location: index.php");		} 		else 		{			echo "não logado";   // mostra essa frase se não estiver logado			}	}

deve ser bobagem mesmo, já tive erros desse gênero e comigo funcionou, faz o teste aí

Compartilhar este post


Link para o post
Compartilhar em outros sites

funcionou não.você colocou o mesmo código que eu havia colocado no começo.Se você deixar sem o EXIT depois do HEADER ele vai carregar a página inteira que deveria ser protegida, mas não vai acessar os bancos de dados, pois os SELECT se baseiam no usuario da SESSION.O problema não tá na verificação das sessões. O problema está no HEADER. Não está redirecionando. Mas eu não entendo porque, pois os outros redirecionamentos de outras funções funcionam normalmente.Eu to encabulado com esse erro, pois funcionaa no localhost, mas nao no servidor.Funciona todos os scripts de redirecionamento, menos esse específico. O que pode estar acontecendo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se tiver algum código HTML antes do header não vai funcionar. (editado, acabei de ver que você já disse que não tem)

 

Uma última opção seria:

echo '<script>location.href="index.php"</script>';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente matar o processo depois.if (!isset($_SESSION['nome']){ die('nao logado');}outra coisa que as vezes ocorre eh ter que dar nome a sessaosession_start();session_name("MINHA_SECAO");if (!isset($_SESSION['nome']){ die('nao logado');}se voce der um print_r na sessao, ta tudo la?

Compartilhar este post


Link para o post
Compartilhar em outros sites

the_flash, em que isso poderia me ajudar? Não existe essa linha no código com problema. O problema está acontecendo com a função verifica_session()Ela não tá redirecionando pro index.php quando acontece o erro.A sessão tá ok. O problema é no redirecionamento. Como eu faço para exibir todos os erros do servidor, pra verificar se tem alguma coisa acontecendo que eu não esteja vendo? Talvez esteja acontecendo algum warning, ou coisa do tipo, e eu não esteja vendo pq o servidor pode ter desabilitado a exibição.

Compartilhar este post


Link para o post
Compartilhar em outros sites

the_flash, em que isso poderia me ajudar? Não existe essa linha no código com problema. O problema está acontecendo com a função verifica_session()Ela não tá redirecionando pro index.php quando acontece o erro.A sessão tá ok. O problema é no redirecionamento. Como eu faço para exibir todos os erros do servidor, pra verificar se tem alguma coisa acontecendo que eu não esteja vendo? Talvez esteja acontecendo algum warning, ou coisa do tipo, e eu não esteja vendo pq o servidor pode ter desabilitado a exibição.

amigo,experimente: ini_set(display_errors,"1");nao sei se esta permitido em seu servidor, mas ele exibirá todos erros, warnings, etc

Compartilhar este post


Link para o post
Compartilhar em outros sites

function verifica_session()

{

session_start();

if((!($_SESSION["email"]))&&(!($_SESSION["senha"])))

{

header("location: index.php");

}

}

 

 

Tenta assim que funciona!!!!

 

 

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema está no Header. Ele não tá redirecionando. Quando eu usei o ini_set(display_errors,"1"); apareceu aquele erro que acontece quando tem saída html antes do Header. Mas eu já procurei em todos os códigos, um por um, e não tem nenhuma saída. Nenhuma mesmo, nem espaço nem nada.. mas quando eu olho o código fonte gerado aparece uns 10 espaços. será possível que o servidor esteja incluindo esses espaços só pra me sacanear?

Compartilhar este post


Link para o post
Compartilhar em outros sites

CaraEu tenho alguns problemas do tipo as vezes, e nao sei se vai funcionar ok?Trabalhamos com windows aqui, e usamos o filezilla, as vezes quando editamos o codigo pelo proprio ftp, ele fica assim.Como resolvemos:Copiamos o codigo, criamos um novo arquivo, deletamos o antigo, e salvamos de novo usando um editor de texto normal e aih funciona.o.O

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.