Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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>
Concertei o erro na sintaxe porem nada ainda acontece. ficou desta forma:
$_SESSION[$this->prefix.'email'];
$_SESSION[$this->prefix.'password'];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
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.
Nada aconteceu, vou fazer o seguinte, vou dar uma estudada mais aprofundada em PHP OO!
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
/applications/core/interface/imageproxy/imageproxy.php?img=http://i.imgur.com/DbThBq6.png&key=d47c1759c1eff3dc9211583eff1095cd514f9a2be5432d97a966bad5e4d10714" alt="DbThBq6.png" />
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...
coloca ?sair=true
e recupera via filter_input validando via boolean se for true desloga.
Lol nunca utilizei isso, sem querer forçar a barra pode me dar um exemplo?
>
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.
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']...
Você está passando o parâmetro como query string valor null
../painel/?sair
correto:
../painel/sair
Sim, eu criei também um arquivo sair pois não é bem o jeito que eu quero, um exemplo:
Veja:
/applications/core/interface/imageproxy/imageproxy.php?img=http://i.imgur.com/GUMYzKA.png&key=adab0e303dc46d3d320f9d5105b71d3caf88ee9858235749587b9c7da6a6b124" alt="GUMYzKA.png" />
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>
Então amigo decide o que vai usar, se url amigável com htaccess, ou :hehehe: query string
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...
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');
} function __autoload($classname)
{
MyAutoload($classname);
}
}
http://php.net/manual/pt_BR/function.spl-autoload-register.php
para funcionar renomeie para class.nomedaclasse
ou altere aqui
$filename = dirname(__FILE__).DIRECTORY_SEPARATOR.'class.'.strtolower($classname).'.php';
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!
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.
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.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
>
} else {
Guardando dados de acesso a aplicação em Sessão amigo?
Debugprint_r( $_SESSION )
Ps.: Guarde outra coisa, ID, token, menos os dados de acesso.