First 1 Denunciar post Postado Fevereiro 26, 2015 Olá, Estou querendo restringir acesso a uma página /painel.php Só que da certo porem ele não reconhece se estou logado ou não para ter acesso. <?php session_start(); if(!isset($_SESSION["user_name"]) || !isset($_SESSION["user_password"])){ header("Location: index.php"); exit; }else{ echo "<br/>"; } ?> O que tem de errado? Ou falta coisa? Me ajude por favor... Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 27, 2015 para debugar, coloque um var_dump($_SESSION);e debugue. Veja o que há realmente na SESSION Compartilhar este post Link para o post Compartilhar em outros sites
First 1 Denunciar post Postado Fevereiro 27, 2015 Olá William, O código não resultou, continua o problema... ocultando a página register.php para desconectados e conectados. Para ser mais especifico eu estou usando o sistema de login do http://www.php-login.net/ o minimal. Desde já obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 27, 2015 Eu não te dei uma solução, eu te dei um debug para entendermos o problema. Qual foi o retorno do var_dump() ? Compartilhar este post Link para o post Compartilhar em outros sites
First 1 Denunciar post Postado Fevereiro 27, 2015 William não retornou nada... será que estou fazendo algo de errado? Ele só retorna para o /index.php Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 27, 2015 Seguinte: <?php session_start(); var_dump($_SESSION); if(!isset($_SESSION["user_name"]) || !isset($_SESSION["user_password"])){ //header("Location: index.php"); exit; }else{ echo "<br/>"; } ?>okay ? e poste aqui o que aparecer. Compartilhar este post Link para o post Compartilhar em outros sites
First 1 Denunciar post Postado Fevereiro 27, 2015 Certo, agora apareceu hahah... já sei usar o var_dump() u.uuh apareceu isso William ta falando que está vazio mais oque está vazio? Como posso resolver? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 27, 2015 A sessão está vazia. Quer dizer que o teu script de login não está gravando nada na sessão. Poste ele. Compartilhar este post Link para o post Compartilhar em outros sites
First 1 Denunciar post Postado Fevereiro 27, 2015 Certo, acredito que isso seja o script que deseja ver... <?php /** * Class login * handles the user's login and logout process */ class Login { /** * @var object The database connection */ private $db_connection = null; /** * @var array Collection of error messages */ public $errors = array(); /** * @var array Collection of success / neutral messages */ public $messages = array(); /** * the function "__construct()" automatically starts whenever an object of this class is created, * you know, when you do "$login = new Login();" */ public function __construct() { // create/read session, absolutely necessary session_start(); // check the possible login actions: // if user tried to log out (happen when user clicks logout button) if (isset($_GET["logout"])) { $this->doLogout(); } // login via post data (if user just submitted a login form) elseif (isset($_POST["login"])) { $this->dologinWithPostData(); } } /** * log in with post data */ private function dologinWithPostData() { // check login form contents if (empty($_POST['user_name'])) { $this->errors[] = "Username field was empty."; } elseif (empty($_POST['user_password'])) { $this->errors[] = "Password field was empty."; } elseif (!empty($_POST['user_name']) && !empty($_POST['user_password'])) { // create a database connection, using the constants from config/db.php (which we loaded in index.php) $this->db_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); // change character set to utf8 and check it if (!$this->db_connection->set_charset("utf8")) { $this->errors[] = $this->db_connection->error; } // if no connection errors (= working database connection) if (!$this->db_connection->connect_errno) { // escape the POST stuff $user_name = $this->db_connection->real_escape_string($_POST['user_name']); // database query, getting all the info of the selected user (allows login via email address in the // username field) $sql = "SELECT user_name, user_email, user_password_hash FROM users WHERE user_name = '" . $user_name . "' OR user_email = '" . $user_name . "';"; $result_of_login_check = $this->db_connection->query($sql); // if this user exists if ($result_of_login_check->num_rows == 1) { // get result row (as an object) $result_row = $result_of_login_check->fetch_object(); // using PHP 5.5's password_verify() function to check if the provided password fits // the hash of that user's password if (password_verify($_POST['user_password'], $result_row->user_password_hash)) { // write user data into PHP SESSION (a file on your server) $_SESSION['user_name'] = $result_row->user_name; $_SESSION['user_email'] = $result_row->user_email; $_SESSION['user_login_status'] = 1; } else { $this->errors[] = "Senha errada. Tente novamente."; } } else { $this->errors[] = "Este usuário não existe."; } } else { $this->errors[] = "Problema de conexão de banco de dados."; } } } /** * perform the logout */ public function doLogout() { // delete the session of the user $_SESSION = array(); session_destroy(); // return a little feeedback message $this->messages[] = "Você foi desconectado."; } /** * simply return the current state of the user's login * @return boolean user's login status */ public function isUserLoggedIn() { if (isset($_SESSION['user_login_status']) AND $_SESSION['user_login_status'] == 1) { return true; } // default return return false; } } Caso não seja isso me avisa... E obrigado William Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 27, 2015 Sim, é esse mesmo. Veja as sessões que ele grava: $_SESSION['user_name'] = $result_row->user_name; $_SESSION['user_email'] = $result_row->user_email; $_SESSION['user_login_status'] = 1;Okay ? Mas veja também que ele possui uma abstração para vc não precisar conhecer quem elas são: public function isUserLoggedIn()entendeu ? vc deveria chamar esse método, em vez de testar as sessões na mão. Algo como: $login = new Login(); if($login-> isUserLoggedIn()){no lugar de: if(!isset($_SESSION["user_name"]) || !isset($_SESSION["user_password"])){ okay ? Mas temos o problema da SESSION estar vazia. O teu usuário não logou "corretamente", pois ele não criou as sessões. Tem registro no banco ? Vc digitou usuario/senha corretamente ? Compartilhar este post Link para o post Compartilhar em outros sites
First 1 Denunciar post Postado Fevereiro 27, 2015 William não entendi muito não, estou iniciando o PHP por agora então tudo é novo para mim. Não entendi como posso fazer oque você falou para dar certo, aqui está um print do usuário logado. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Fevereiro 27, 2015 Leia novamente o que eu disse. Se tiver dúvidas pergunte alguma coisa em específico. Troque: <?php session_start(); if(!isset($_SESSION["user_name"]) || !isset($_SESSION["user_password"])){ header("Location: index.php"); exit; }else{ echo "<br/>"; } ?>por <?php require 'Login.php'; //corrija esse caminho e o nome do arquivo. $login = new Login(); if(!$login->isUserLoggedIn()){ header("Location: index.php"); exit; } else { echo "Usuário logado !!<br/>"; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
First 1 Denunciar post Postado Fevereiro 27, 2015 Nossa, muito obrigado William... sem palavras obrigado mesmo! Você é de mais. Compartilhar este post Link para o post Compartilhar em outros sites