Viper33 1 Denunciar post Postado Fevereiro 26, 2014 Alguém já passou por uma situação em que as sessões que antes funcionavam normalmente não funcionam mais? O pior é que no meu computador funciona corretamente, mas na hospedagem não funciona mais. E o suporte me diz que o sistema deles está funcionando corretamente. Compartilhar este post Link para o post Compartilhar em outros sites
Jonaslhp 39 Denunciar post Postado Fevereiro 26, 2014 O que não funciona, exatamente? Compartilhar este post Link para o post Compartilhar em outros sites
Viper33 1 Denunciar post Postado Fevereiro 26, 2014 Após digitar o login e senha e clicar em enviar, era para o formulário direcionar para a página ope.php para fazer a validação. Caso a validação estivesse ok, seria direcionado para a página index da página administrativa. O que acontece é que ao clicar em enviar, vai para a página ope.php e para por aí. Não abre a index do setor administrativo.Como disse anteriormente, no meu computador funciona corretamente, no servidor que antes funcionava também, agora não funciona mais. Página ope.php <?php include_once ("./conexao/conexao.php");?> <?php session_start();?> <?php if(isset($_POST['acao'])) { $usuario = ($_POST['usuario']); $senha = ($_POST['senha']); if($usuario=="") { echo '<script>alert("Informe o seu login.");location.href="./frm_loginadm.php";</script>'; } if($senha=="") { echo '<script>alert("Informe a sua senha.");location.href="./frm_loginadm.php";</script>'; } else if(!empty($usuario) and !empty($senha)); { $sql= ("select * from usuario where login = ? and senha = ?"); $verifica= $pdo->prepare($sql); $verifica->bindValue(1,$usuario); $verifica->bindValue(2,$senha); $verifica->execute(); if($verifica->rowCount()>0) { $_SESSION['usuario'] = $usuario; $_SESSION['senha'] = $senha; header("location:./adm/index.php"); } else { unset ($_SESSION['usuario']); unset ($_SESSION['senha']); echo '<script>alert("Usuário ou senha inválidos!"); location.href="./frm_loginadm.php";</script>'; } } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Jonaslhp 39 Denunciar post Postado Fevereiro 27, 2014 session_start() deve ser a primeiro coisa no seu código. Habilite os erros do PHP e veja se retorna alguma mensagem de erro: error_reporting(E_ALL); ini_set( 'display_errors','1'); Compartilhar este post Link para o post Compartilhar em outros sites
Viper33 1 Denunciar post Postado Fevereiro 28, 2014 session_start() deve ser a primeiro coisa no seu código. Habilite os erros do PHP e veja se retorna alguma mensagem de erro: error_reporting(E_ALL); ini_set( 'display_errors','1'); Dessa forma dá erro com mensagem de que o cabeçalho não pode ser enviado e etc. Mas acredito ter encontrado o problema: parece que como a minha hospedagem era gratuita a Hostinger bloqueou as sessões e o backup para me obrigar a assinar um plano. Como disse, o sistema funcionava perfeitamente e depois de alguns meses não funcionou mais. A questão é que quando entrava em contato com o suporte, eles me diziam que estava tudo ok e não me informavam a realidade. Se for isso mesmo marcarei o tópico como resolvido. Assinei um plano e aguardo. Compartilhar este post Link para o post Compartilhar em outros sites
Viper33 1 Denunciar post Postado Março 7, 2014 Existe uma maneira diferente desta header("location:./adm/index.php"); para redirecionar para a página index.php? Porque é a única parte do código que não está funcionando. Compartilhar este post Link para o post Compartilhar em outros sites
dsmachado 14 Denunciar post Postado Março 7, 2014 Podia ter aberto um novo tópico... Mas existe em javascript: <script> window.location.replace("url"): </script> Compartilhar este post Link para o post Compartilhar em outros sites
Viper33 1 Denunciar post Postado Março 7, 2014 Ok, dsmachado, também não funcionou. Não sai da página ope.php. Só pode ser problema na hospedagem, pois no meu pc funciona normalmente. Infelizmente não consigo resolver esse problema. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Março 7, 2014 Dessa forma dá erro com mensagem de que o cabeçalho não pode ser enviado e etc. Mas acredito ter encontrado o problema: parece que como a minha hospedagem era gratuita a Hostinger bloqueou as sessões e o backup para me obrigar a assinar um plano headers already sent , certo ? a hospedagem nao está fazendo conspiração contigo... apenas conserte o problema.. :seta: http://forum.imasters.com.br/topic/342563-dicas-para-uso-de-variveis-de-sesso/ Compartilhar este post Link para o post Compartilhar em outros sites
Viper33 1 Denunciar post Postado Março 7, 2014 Hinom, O problema real é o seguinte: No meu computador o site e as sessões funcionam perfeitamente. Online funcionava normalmente também.. Depois de alterações na hospedagem o login não funciona mais. Apesar do arquivo que redireciona para a página administrativa informar quando deixo os campos vazios ou quando digito login ou senha errados, ele não me leva até a página administrativa quando digito login e senha corretos. Simplesmente vai para a página que faz as verificações (ope.php), ou seja, não vai para a index, fica no meio do caminho. Não apresenta mensagem de erro nenhuma, mesmo usando error_reporting(E_ALL); ini_set( 'display_errors','1'); Enfim, porque essa parte do código não funciona no servidor mas funciona no meu pc: if($verifica->rowCount()>0) { $_SESSION['usuario'] = $usuario; $_SESSION['senha'] = $senha; header("location:./adm/index.php"); } Compartilhar este post Link para o post Compartilhar em outros sites
Dorian Neto 41 Denunciar post Postado Março 7, 2014 @Viper33, pq você não faz um simples teste criando uma sessão e atribuindo um valor a ela apenas para verificar o funcionamento das sessões ? Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Março 8, 2014 Depois de alterações na hospedagem o login não funciona mais. E quais foram essas alterações ? Mudou versão do PHP ou algo do tipo? Siga a dica do #11.. Se quer um exemplo de como testar, veja exemplo no manual: http://www.php.net/manual/en/ref.session.php#99664 Compartilhar este post Link para o post Compartilhar em outros sites
Viper33 1 Denunciar post Postado Março 8, 2014 Hinom, Eles mudaram uma série de coisas no painel de controle e a partir daí o backup não funciona mais, as estatísticas e uma série de outras coisas que eles estão alterando. A princípio a versão do php não mudou.Verifiquei que há uma série de usuários narrando problemas, que a sessão do site deles não funciona e etc. Porém, há alguns usuários dizendo que no site deles está normal. E isso é um dos pontos que está dificultando a solução. Vou ver o seu link e a dica do #11. Usando o <?php error_reporting( E_ALL ); ini_set( 'display_errors', 1);?> no início do código aparece a mensagem abaixo. Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/u970889492/public_html/conexao/conexao.php:1) in /home/u970889492/public_html/ope.php on line 4Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/u970889492/public_html/conexao/conexao.php:1) in /home/u970889492/public_html/ope.php on line4Warning: Cannot modify header information - headers already sent by (output started at /home/u970889492/public_html/conexao/conexao.php:1) in /home/u970889492/public_html/ope.php on line 31 Verifiquei no arquivo de conexão e não encontrei nenhum espaço em branco. A linha 4 é essa: $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); E o erro da linha 31 é justamente onde ele deveria levar para página administrativa: header("location:./adm/index.php"); Como já disse, se digito o login e senha errados ele informa que estão errados, portanto está se conectando. Dei um echo nessa parte $_SESSION['usuario'] = $usuario; $_SESSION['senha'] = $senha; header("location:./adm/index.php"); E mostra o usuário e senha corretamente. E Hinom, um link anterior que você mandou está com as imagens com links "quebrados", não consegui ver. Usando o simple session test version 1.1 o que aparece é: sessPath: /tmpsessCookie: / test 1 (printing session value) test 2 (kill session)  Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Março 8, 2014 certo.. nesse teste de sessão "test version 1.1", adicione no topo, para exibir possíveis erros: error_reporting( E_ALL ); ini_set( 'display_errors', 1); Veja que tem 2 links abaixo, um serve para imprimir o vvalor da sessão e o outro para excluir. Clique no primeiro e veja se imprime o valor. Se não imprimir nada ou se exibir o erro de "headers alredy sent", então realmente tem algo no server.. Um ponto importante, verifique o tipo de encode do arquivo PHP. Caso esteja com UTF-8, verifique se está sem o UTF8-BOM. Deve estar como UTF8-ANSI. UTF8-BOM é um caracter "oculto" que provoca um output, gerando escrita no header. Compartilhar este post Link para o post Compartilhar em outros sites
Viper33 1 Denunciar post Postado Março 8, 2014 Sim, eu vi os links e havia clicado neles obtendo o seguinte resultado: Not FoundThe requested URL /tmp.php was not found on this server. Fazendo o que vc solicitou obtive isso: sessPath: /tmpsessCookie: / test 1 (printing session value) test 2 (kill session)  Warning: Cannot modify header information - headers already sent by (output started at /home/u970889492/public_html/ope.php:18) in /home/u970889492/public_html/ope.php on line 101 Linha 18 - echo '<br>sessPath: ' . $sessPath; Linha 101 - header("location:./adm/index.php"); Também havia verificado se estavam com BOM, mas salvei-os sem BOM. Tudo indica que o problema está no servidor. Se fosse de programação, não funcionaria no meu computador e nem teria funcionado no server antes deles alterarem o serviço. Grato pela paciência e ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Março 8, 2014 1º passo Not Found The requested URL /tmp.php was not found on this server. vc realmente entendeu como fazer o teste ? O script do teste, salve-o num arquivo único. Não coloque-o dentro de outros scripts.. Crie um novo arquivo chamado "tmp.php", por exemplo e execute-o. O nome do arquivo pode ser qualquer nome que desejar.. apenas atente-se que se for diferente de "tmp.php" terá que alterar manualmente os links. No browser, vc acessa assim: http://seusite/tmp.php Para melhor depuração, acesse visualizando o código gerado. Usando o Chrome é: view-source:http://seusite/tmp.php 2º passo Na linha 101 faça um breakpoint antes do header(); header("location:./adm/index.php"); exemplo: /** * For debug purposes only */ if (headers_sent($filename, $linenum)) { echo '<br />' . PHP_EOL . $filename . '<br />' .PHP_EOL . $linenum; } echo '<br />' .PHP_EOL . time(); exit; header("location:./adm/index.php"); O intuito é verificar por cabeçalhos enviados. Compartilhar este post Link para o post Compartilhar em outros sites
Viper33 1 Denunciar post Postado Março 8, 2014 Hinom, Apareceu isso: Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/u970889492/public_html/conexao/conexao.php:1) in /home/u970889492/public_html/ope.php on line 12Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/u970889492/public_html/conexao/conexao.php:1) in /home/u970889492/public_html/ope.php on line12A linha 12 é: session_start(); sessPath: /tmpsessCookie: / test 1 (printing session value) test 2 (kill session) /home/u970889492/public_html/conexao/conexao.php11394290554O ope.php está assim: <?php include_once ("./conexao/conexao.php");?> <?php error_reporting( E_ALL ); ini_set( 'display_errors', 1);?> <?php /* [EDIT by danbrown AT php DOT net: The author of this note named this file tmp.php in his/her tests. If you save it as a different name, simply update the links at the bottom to reflect the change.] */ session_start(); $sessPath = ini_get('session.save_path'); $sessCookie = ini_get('session.cookie_path'); $sessName = ini_get('session.name'); $sessVar = 'foo'; echo '<br>sessPath: ' . $sessPath; echo '<br>sessCookie: ' . $sessCookie; echo '<hr>'; if( !isset( $_GET['p'] ) ){ // instantiate new session var $_SESSION[$sessVar] = 'hello world'; }else{ if( $_GET['p'] == 1 ){ // printing session value and global cookie PHPSESSID echo $sessVar . ': '; if( isset( $_SESSION[$sessVar] ) ){ echo $_SESSION[$sessVar]; }else{ echo '[not exists]'; } echo '<br>' . $sessName . ': '; if( isset( $_COOKIE[$sessName] ) ){ echo $_COOKIE[$sessName]; }else{ if( isset( $_REQUEST[$sessName] ) ){ echo $_REQUEST[$sessName]; }else{ if( isset( $_SERVER['HTTP_COOKIE'] ) ){ echo $_SERVER['HTTP_COOKIE']; }else{ echo 'problem, check your PHP settings'; } } } }else{ // destroy session by unset() function unset( $_SESSION[$sessVar] ); // check if was destroyed if( !isset( $_SESSION[$sessVar] ) ){ echo '<br>'; echo $sessName . ' was "unseted"'; }else{ echo '<br>'; echo $sessName . ' was not "unseted"'; } } } ?> <hr> <a href=tmp.php?p=1>test 1 (printing session value)</a> <br> <a href=tmp.php?p=2>test 2 (kill session)</a> <?php if(isset($_POST['acao'])) { $usuario = ($_POST['usuario']); $senha = ($_POST['senha']); if($usuario=="") { echo '<script>alert("Informe o seu login.");location.href="./frm_loginadm.php";</script>'; } if($senha=="") { echo '<script>alert("Informe a sua senha.");location.href="./frm_loginadm.php";</script>'; } else if(!empty($usuario) and !empty($senha)); { $sql= ("select * from usuario where login = ? and senha = ?"); $verifica= $pdo->prepare($sql); $verifica->bindValue(1,$usuario); $verifica->bindValue(2,$senha); $verifica->execute(); if($verifica->rowCount()>0) { $_SESSION['usuario'] = $usuario; $_SESSION['senha'] = $senha; if (headers_sent($filename, $linenum)) { echo '<br />' . PHP_EOL . $filename . '<br />' .PHP_EOL . $linenum; } echo '<br />' .PHP_EOL . time(); exit; header("location:./adm/index.php"); } else { unset ($_SESSION['usuario']); unset ($_SESSION['senha']); echo '<script>alert("Usuário ou senha inválidos"); location.href="./frm_loginadm.php";</script>'; } } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Março 8, 2014 Foi bem fácil encontrar um erro muito comum.. Olha isso: <?php include_once ("./conexao/conexao.php");?> <?php error_reporting( E_ALL ); ini_set( 'display_errors', 1);?> <?php No link do post #9, há um exemplo que mostra esse erro O tópico está zuado porque o imageshak deve ter apagado as imagens ou mudou o endereço, mas enfim.. Quando fecha e abre as tags PHP, há um output, ou seja, um header é enviado. Vou tentar desenhar: Temos isso aqui, certo ? ?> <? Há uma quebra de linha entre ambos: ?> <--- aqui a quebra de linha... isso gera um cabeçalho <? Sacou? Não há necessidade em fechar e abrir tags PHP se o código seguinte for PHP.. Exemplo do que não fazer: <?php include_once ("./conexao/conexao.php");?> <?php error_reporting( E_ALL ); ini_set( 'display_errors', 1);?> <?php // outro codigo... Para corrigir: <?php error_reporting( E_ALL ); ini_set( 'display_errors', 1); include_once ("./conexao/conexao.php"); // outro código obs: Isso corrige um ponto falho nos seus código mas não quer dizer que poderá corrigir tudo... pode haver outro locais com o mesmo tipo de erro ou outros tipos.. off Sobre o teste de sessão nos exemplos do php.net, vc aplicou errado e continua sem entender.. leia com atenção o post #16.. Compartilhar este post Link para o post Compartilhar em outros sites
Viper33 1 Denunciar post Postado Março 8, 2014 Hinom, Realmente não havia entendido o post #16. Refiz conforme sua orientação e quando clico no link 1 aparece isso: 7a2c3dc586283cbbc840dde127ed7acd sessPath: /tmpsessCookie: / foo: hello worldPHPSESSID: 7a2c3dc586283cbbc840dde127ed7acd test 1 (printing session value) test 2 (kill session)Quando clico no segundo: PHPSESSID was "unseted" Corrigi o código retirando o monte de tags PHP desnecessárias. Eu fazia isso no intuito de delimitar o código alterado para evitar que atrapalhasse indevidamente alguma outra parte do código. Vivendo e aprendendo. Agora, quando tento fazer o login usando o seu breakpoint, aparece isso: /home/u970889492/public_html/conexao/conexao.php11394298811Sem o seu breakpoint aparece isso: Warning: Cannot modify header information - headers already sent by (output started at /home/u970889492/public_html/conexao/conexao.php:1) in /home/u970889492/public_html/ope.php on line 29A linha 29: header("location:./adm/index.php"); Já verifiquei se há mais algum código php desnecessário no ope.php, no conexao.php e no index.php, mas pelo que vi está tudo ok.Sabe me informar porque esse problema ocorre no servidor, mas localmente funciona normal?Grato pela paciência e ajuda. conexao.php: <?php try{ $pdo = new PDO('editado por segurança, mas contém os dados básicos para conexao'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e){ echo $e->getMessage(); exit('Erro ao conectar com o banco de dados!'); } ?> Li o post #6 e vi que o header pode gerar esse problema. Tentei com javascript porém não obtive sucesso: <script> window.location.replace("./adm/index.php"); </script> Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Março 9, 2014 7a2c3dc586283cbbc840dde127ed7acd sessPath: /tmp sessCookie: / foo: hello world PHPSESSID: 7a2c3dc586283cbbc840dde127ed7acd test 1 (printing session value) test 2 (kill session) Quando clico no segundo: PHPSESSID was "unseted" Nesse teste não apareceu mensagem de erro de header already sent, certo? Só preciso saber disso para entender o que pode estar ocorrendo pois o teste retornou o resultado esperado para um bom funcionamento. Compartilhar este post Link para o post Compartilhar em outros sites