CrazyLOL 2 Denunciar post Postado Setembro 12, 2015 Galera, estou trabalhando em um projeto e estou usando PHP OO, e nesse processo encontrei uma classe na internet que é responsavel para trabalhar com as session que vou ter no sistema, até ai está tranquilo. Único problema é que estou tendo está mensagem: Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /Users/tabaco/Google Drive/Projetos/Sites/crm/com/php/model/Autenticar.php:55) in /Users/tabaco/Google Drive/Projetos/Sites/crm/com/php/lib/Sessao.php on line 12 Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /Users/tabaco/Google Drive/Projetos/Sites/crm/com/php/model/Autenticar.php:55) in /Users/tabaco/Google Drive/Projetos/Sites/crm/com/php/lib/Sessao.php on line 12 Vou postar as minhas duas classes, ambas estão na raiz do meu projeto. Classe Sessao: <?php class Sessao { public static function set($chave, $valor) { session_start(); $_SESSION[$chave] = $valor; session_write_close(); } public static function get($chave) { session_start(); $value = $_SESSION[$chave]; session_write_close(); return $value; } public static function checar($chave) { session_start(); if (isset($_SESSION[$chave]) && (!empty($_SESSION[$chave]))) { session_write_close(); return true; } else { session_write_close(); return false; } } public static function destroy(){ session_start(); session_regenerate_id(true); session_destroy(); session_write_close(); } } Classe Autenticar: <?php /** * Autenticar * @author Roni */ class Autenticar { public static function isLogin(){ if(Sessao::checar('crm_cod_empresa') && Sessao::checar('crm_cod_funcionario')){ return true; }else{ self::logoff(); //redirecionar header("Location: login.php"); } } public static function logoff(){ Sessao::destroy(); } public static function loginWeb($usuario, $senha){ $DB = new DataBase(); //recuperando os dados do funcionario $query = "select a.*, c.ativo as ativo_empresa, c.cod_sistema_empresa from empresas_funcionario a left outer join empresas b on b.cod_empresa = a.cod_empresa left outer join sistema_empresas c on c.cod_sistema_empresa = b.cod_sistema_empresa where a.usuario = '{$usuario}' and a.senha = '{$senha}'"; $result = $DB->query($query); if($result->num_rows > 0){ $obj = $result->fetch_object(); //verificando se a empresa está ativa no sistema if($obj->ativo_empresa === 'S'){ //verificando conta do usuario ativo if($obj->ativo === 'S'){ //criando as Sessões Sessao::set('crm_cod_sistema_empresa', $obj->cod_sistema_empresa); Sessao::set('crm_cod_funcionario', $obj->cod_funcionario); Sessao::set('crm_cod_empresa', $obj->cod_empresa); Sessao::set('crm_cod_grupo_acesso', $obj->cod_grupo_acesso); //verificando se tem acessos $acessos = $obj->acessos !== '' && $obj->acessos !== null ? explode(",", $obj->acessos) : array(); Sessao::set('crm_acessos', $acessos); echo "meu csaco".$obj->cod_sistema_empresa."<br>"; echo "Testestests: ".Sessao::get('crm_cod_sistema_empresa'); return true; }else{ return "Seu usuário está inativo, entre em contato com o administrador do sistema"; } }else{ return "Ops, acesso não autorizado. Entre em contato com o Suporte."; } }else{ return "Usuário ou senha estão incorretos"; } } } Já procurei na internet e alguns foruns falaram que o Session precisa iniciar antes de qualquer arquivo, fiz os testes colocando o session_start() no inicio do arquivo antes de tudo mas mesmo assim aparece a mensagem, o meu arquivo esta salvo no formato certo tambem vi algo falando sobre o formato BOM do editor de texto e etc.. Enfim, gostaria de seguir a logica correta no OO, o que fiz ou deixei de fazer? Agradeço a ajuda antecipadamente. Compartilhar este post Link para o post Compartilhar em outros sites
LandersonAlmeida 31 Denunciar post Postado Setembro 13, 2015 Você deve setar sessões antes de qualquer saida HTML, ou seja, antes do doctype, e salve seu arquivo utilizando UTF-8 (Sem BOM) Compartilhar este post Link para o post Compartilhar em outros sites
CrazyLOL 2 Denunciar post Postado Setembro 13, 2015 Sim LandersonAlmeida o arquivo está salvo neste formato. Mas ai que está o negocio... os includes dos arquivos estão sempre no TOPO, antes do doctype... Compartilhar este post Link para o post Compartilhar em outros sites
LandersonAlmeida 31 Denunciar post Postado Setembro 13, 2015 Passei por isto ano passado, e quando fui ver era uma quebra de linha desnecessária e um arquivo sem estar salvo em UTF-8, verifique novamente todos os seus arquivos, tenho quase certeza que é isto :) Compartilhar este post Link para o post Compartilhar em outros sites
CrazyLOL 2 Denunciar post Postado Setembro 22, 2015 Resolvi ocultando o erro.. :P Compartilhar este post Link para o post Compartilhar em outros sites
LandersonAlmeida 31 Denunciar post Postado Setembro 22, 2015 Não é o caminho certo mas ok :P Compartilhar este post Link para o post Compartilhar em outros sites