TheNight 1 Denunciar post Postado Maio 16, 2015 Estou com um grande problema com a função de deslogar do painel, fiz uma public function Logout() Arquivo Login.class.php: public function Logout(){ if($this->isLogged()) { unset($_SESSION[$this->prefix.['email']]); unset($_SESSION[$this->prefix.['password']]); session_destroy(); return true; } else { return false; } } E no meu arquivo panel.php está assim: session_start(); $Logins = new Logins(); if (!$Logins->isLogged()) { header("Location: ?pag=login"); } else {} if(isset($_GET['action']) == 'logout') { if($Logins->Logout()) { header("Location: ?pag=login"); } } Agora que estou tendo problemas, estou a exatamente 8 horas empacado nisso, quando clico em Logout ele volta para home.php mas a session não destrói, não acontece absolutamente nada. O que estou fazendo de errado? Obs: Meu link estás assim: <a href="?action=logout">Logout</a> Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Maio 16, 2015 public function Logout(){ if($this->isLogged()) { unset($_SESSION[$this->prefix.['email']]); unset($_SESSION[$this->prefix.['password']]); session_destroy(); return true; } else { return false; } } Guardando dados de acesso a aplicação em Sessão amigo? Faça um Debug na $_SESSION e veja se não tem erro de sintaxe abaixo. $_SESSION[$this->prefix.['email']] Debug print_r( $_SESSION ) Ps.: Guarde outra coisa, ID, token, menos os dados de acesso. Compartilhar este post Link para o post Compartilhar em outros sites
TheNight 1 Denunciar post Postado Maio 16, 2015 Concertei o erro na sintaxe porem nada ainda acontece. ficou desta forma: $_SESSION[$this->prefix.'email']; $_SESSION[$this->prefix.'password']; Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Maio 16, 2015 Passe a session_start neste método e veja o que acontece. <?php public function Logout(){ if($this->isLogged()) { if (session_status() == PHP_SESSION_NONE) { session_start(); } unset($_SESSION[$this->prefix.'email']); unset($_SESSION[$this->prefix.'password']); session_destroy(); return true; } else { return false; } } De uma olhada aqui Compartilhar este post Link para o post Compartilhar em outros sites
Alaerte Gabriel 662 Denunciar post Postado Maio 17, 2015 Infelizmente a maioria dos servidores ainda utilizam o php 5.2... por tanto, fora do ambiente de produção, muito cuidado ao utilizar funções novas. Compartilhar este post Link para o post Compartilhar em outros sites
TheNight 1 Denunciar post Postado Maio 17, 2015 Nada aconteceu, vou fazer o seguinte, vou dar uma estudada mais aprofundada em PHP OO! Compartilhar este post Link para o post Compartilhar em outros sites
TheNight 1 Denunciar post Postado Maio 18, 2015 Eu sei que é fora das regras, mas vou reviver isso aqui... Seguinte, como eu não gosto de deixar nada pra traz e gosto de resolver meus problemas, eu vou dizer o que acontece... Estou trabalhado com URL amigável, segue meu script em PHP que faz acontecer a mágica: <?php $url = (isset($_GET['url'])) ? $_GET['url'] : ''; $explode = explode('/', $url); $paginas = array( "home", "login", "register", "painel", "sair" ); if (isset($explode[0]) && $explode[0] == '') { include "pages/home.php"; } elseif ($explode[0] != '') { if (isset($explode[0]) && in_array($explode[0], $paginas)) { include "pages/" . $explode[0] . ".php"; } else { include "pages/home.php"; } } ?> E também meu .htaccess RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d RewriteRule ^(.*)$ index.php?url=$1 Quando dou um print_r no meu $_GET veja o que aparece: Array ( [url] => painel/ ) Uma imagem fala mais que mil palavras :D Obs: Este site é pra treino meu com PHP PDO OO. Entenderam? Meu $_GET não está sendo recuperado de forma alguma, alguém teria conhecimento do que é? :google: Pesquisei a respeito e nada encontrado... Compartilhar este post Link para o post Compartilhar em outros sites
paulinhosupriano 103 Denunciar post Postado Maio 18, 2015 coloca ?sair=true e recupera via filter_input validando via boolean se for true desloga. Compartilhar este post Link para o post Compartilhar em outros sites
TheNight 1 Denunciar post Postado Maio 18, 2015 Lol nunca utilizei isso, sem querer forçar a barra pode me dar um exemplo? Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Maio 18, 2015 Seguinte, como eu não gosto de deixar nada pra traz e gosto de resolver meus problemas, eu vou dizer o que acontece... Estou trabalhado com URL amigável, segue meu script em PHP que faz acontecer a mágica: <?php $url = (isset($_GET['url'])) ? $_GET['url'] : ''; $explode = explode('/', $url); $paginas = array( "home", "login", "register", "painel", "sair" ); if (isset($explode[0]) && $explode[0] == '') { include "pages/home.php"; } elseif ($explode[0] != '') { if (isset($explode[0]) && in_array($explode[0], $paginas)) { include "pages/" . $explode[0] . ".php"; } else { include "pages/home.php"; } } ?> Essa mágica é php estruturado, a dúvida ainda persiste sobre o as sessions? Se ainda persiste, tem que passar pela a url o nome do método que encerra a sessão. Compartilhar este post Link para o post Compartilhar em outros sites
TheNight 1 Denunciar post Postado Maio 18, 2015 Sobre as sessions já resolvi, era só incluir no arquivo a chamada da class, agora eu não consigo deslogar por conta da URL amigável, ela não captura o valor do meu $_GET['sair']... Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Maio 18, 2015 Você está passando o parâmetro como query string valor null ../painel/?sair correto: ../painel/sair Compartilhar este post Link para o post Compartilhar em outros sites
TheNight 1 Denunciar post Postado Maio 18, 2015 Sim, eu criei também um arquivo sair pois não é bem o jeito que eu quero, um exemplo: Veja: Pra entender melhor o exemplo, eu to passando por $_GET: if (isset($_GET["sair"]) && $_GET["sair"] == true) { if($Logar->Deslogar()) { header("Location: login"); } } Minha url está assim: <a href="?sair=true"> Sair </a> Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Maio 18, 2015 Então amigo decide o que vai usar, se url amigável com htaccess, ou :hehehe: query string Compartilhar este post Link para o post Compartilhar em outros sites
TheNight 1 Denunciar post Postado Maio 18, 2015 Tá eu quero com url amigável mas se for com url amigavel terei que criar um arquivo separado né? com por exemplo: Arquivo sair.php e colocar la dentro a função pra deslogar...? #editado==== Resolvido, não da forma que eu queria, pois vou ter problemas pra recurar os valores do $_GET no futuro, :/ o jeito foi criar um arquivo sair.php e dentro dele chamar : <?php session_start(); require_once(dirname(__DIR__) . "/modules/class/Connection.class.php"); require_once(dirname(__DIR__) . "/modules/class/Logar.class.php"); $Logar = new Logar(); $Logar->Deslogar(); header("Location: login"); e no link: <a href="<?php echo URL_BASE; ?>/sair" onclick="return confirm('Deseja mesmo sair do painel?');"> Sair </a> É no futuro vou ter problemas pra passar o get... Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Maio 18, 2015 De uma olhada aqui, e aqui, e evite essa gambiarra toda!! Para chamar as classes automaticamente, use Autoload Inclua este arquivo abaixo dentro da pasta que contem as classes, depois é só chamar a autoload Exemplo: <?php session_start(); require_once(dirname(__DIR__) . "/modules/class/MyAutoload.php"); $Logar = new Logar(); <?php function MyAutoload($classname) { $filename = dirname(__FILE__).DIRECTORY_SEPARATOR.'class.'.strtolower($classname).'.php'; if (is_readable($filename)) { require $filename; } } if (version_compare(PHP_VERSION, '5.1.2', '>=')) { if (version_compare(PHP_VERSION, '5.3.0', '>=')) { spl_autoload_register('MyAutoload', true, true); } else { spl_autoload_register('MyAutoload'); } } else { function __autoload($classname) { MyAutoload($classname); } } http://php.net/manual/pt_BR/function.spl-autoload-register.phppara funcionar renomeie para class.nomedaclasseou altere aqui $filename = dirname(__FILE__).DIRECTORY_SEPARATOR.'class.'.strtolower($classname).'.php'; Compartilhar este post Link para o post Compartilhar em outros sites
TheNight 1 Denunciar post Postado Maio 18, 2015 Troquei minha função antiga de autoload pra essa que você me passou, mas como o tópico que vc postou é antigo, nao posso restaura-lo, eu nao entendi aquele tópico! Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Maio 18, 2015 Já que está começando, já faça seus códigos nos padrões do MVC Entende inglês? Comece por aqui é bem didático.Aquele tópico já um pouco avançado, mas se seguir as aulas conseguira entender. Este AutoLoad abaixo, já carrega as classes dentro deste padrão. <?php $paths = array( __DIR__ . DIRECTORY_SEPARATOR, MODEL, CONTROLLER, VIEW ); set_include_path(implode(PATH_SEPARATOR, array_unique($paths))); /* *Autoloader que implementa o PSR-0 especificações para a interoperabilidade entre software PHP. */ spl_autoload_register( function($className) { $fileParts = explode('\\', ltrim($className, '\\')); if (false !== strpos(end($fileParts), '_')) array_splice($fileParts, -1, 1, explode('_', current($fileParts))); $file = implode(DIRECTORY_SEPARATOR, $fileParts) . '.php'; foreach (explode(PATH_SEPARATOR, get_include_path()) as $path) { if (file_exists($path = $path . DIRECTORY_SEPARATOR . $file)) return require $path; } } ); Só definir as contantes do diretório. <?php $paths = array( __DIR__ . DIRECTORY_SEPARATOR, MODEL, CONTROLLER, VIEW ); PS.: Ganhe uma semana estudando as videos aulas, e entenda o conceito e me agradecera no futuro. Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
TheNight 1 Denunciar post Postado Maio 21, 2015 Eu estava até hoje tentando arrumar, por que eu sou assim, enquanto eu não arrumo tal coisa eu não sossego, e consegui, no meu .htaccess estava assim: RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 apenas troquei para RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA] <- repare no QSA agora consigo passar query string com url amigável. Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Maio 21, 2015 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule> Compartilhar este post Link para o post Compartilhar em outros sites