Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola pessoal !!
Bom Dia galera!!!
andei pesquisando como eu posso proteger meu sistema.. e fiz um login e senha usando sessions na pagina seguinte
eu ja criei a tabela no banco chamada "login" com os campos:id_login, login e senha...
VALUES(douglas e speed)....
tenho meu <form> de login e senha q esta td ok...e no action="login.php" q e a pagina seguinte q da erro..
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
include("conexao.php");// arquivo de conexão com banco de dados
$login = $_POST['login'];
$senha = $_POST['senha'];
$sql = "SELECT * FROM login WHERE login='$login' AND senha='$senha'";//erro nessa linnha.
$res = mysql_query($sql) or exit(mysql_error());
$row = mysql_num_rows($res) or exit(mysql_error());
// verificar se existe o login e senha
if($row == 0)
{
echo "Login ou senha incorretos!<br />";
echo "Clique <a href='index.php'>AQUI</a> para voltar e tentar novamente.";
}
else
{
// registra sessão de login.
session_start("login");
session_name();
session_destroy();
session_register("login", "senha");
header("Location:pg_admin.php");
exit;
}
?>
o erro q aprece e:
Parse error: parse error, unexpected '<' in C:\Arquivos de programas\EasyPHP 2.0b1\www\ISSEC\pg_admin.php on line 16
alguem sabe oq poder ser?
eu to usando o MYSQL!!
<html>
<head>
<title>ISSEC</title>
<link rel="stylesheet" type="text/css" href="css.css"/>
</head>
<body bgcolor="silver">
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
include("conexao.php");
?>
<fieldset style="width: 25%;">
<legend>Login</legend>
<form method="POST" action="login.php">
<p >Usuário: <input type="text" name="login" size="20"></p>
<p >Senha: <input type="password" name="senha" size="20"></p>
<input type="submit" name="submi" value="Entrar">
</form>
</fieldset>
</body>
</html>
arquivo de conexao.php
<?php
$host="localhost";
$usuario="root";
$senha="";
$banco= mysql_connect($host,$usuario,$senha) or die("Nao foi possivel conectar o servidor ");
$dada=mysql_select_db("banco", $banco) or die ("Nao foi possivel selecionar o Banco");
?>
pronto!
>
Coloque o cód. do formulário e o cód. do arquivo conexao.php
cara eu ja achei o erro q estava dando no SELECT ... MAS no <form> de login e senha eu colocar um nome e uma senha q ñ existe na tabela de login... ñ aparece essa mensagem
if($row == 0)
{
echo "Login ou senha incorretos!<br />";
echo "Clique <a href=\"index.php\">AQUI</a> para voltar e tentar novamente.";
}
else
mas se eu digitar o login e senha correto eu cosigo entra na pagina pg_admin.php
else
{
// registra sessão de login.
session_start();
session_name();
session_destroy();
session_register("login", "senha");
header("Location:pg_admin.php");
exit;
}
...
na pagina de pg_admin.php da um error na SESSION:
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
include("conexao.php");
include("verifica.php");
echo "Olá ".$_SESSION['login'].", você está autenticado!";//ERRO NESSA LINHA!!
?>
o eerro q aparece e:
Notice: Undefined variable: _SESSION in C:\Arquivos de programas\EasyPHP 2.0b1\www\ISSEC\pg_admin.php on line 14
Olá , você está autenticado!
session_start();
session_destroy() ???
session_start(); e para inicia a sessao de 'login'..
isso com certeza .... mas porque tu acaba com ela logo em seguida?
ca eu ñ sei bem o pq desse:
session_destroy()
se me lebro bem..meu prof disse q sao como parametros para a sessao ser registrada no banco!
opa achei o erro.. agora so esta dando erro na SESSION:
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
include("conexao.php");
include("verifica.php");
echo "Olá ".$_SESSION['login'].", você está autenticado!";
?>
o movivo de ñ aparecer essa mensagem era o "or exit(mysql_error())"
$res = mysql_query($sql) ;
$row = mysql_num_rows($res);
// verificar se existe o login e senha
if($row == 0)
{
echo "Login ou senha incorretos!<br />";
echo "Clique <a href=\"index.php\">AQUI</a> para voltar e tentar novamente.";
}
else
aguem sabe o motivo desse erro!
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
include("conexao.php");
include("verifica.php");
echo "Olá ".$_SESSION['login'].", você está autenticado!";// erro nessa linha...
?>
em vez desse erro era para aprecer meu nome de login!!
Notice: Undefined variable: _SESSION in C:\Arquivos de programas\EasyPHP\www\ISSEC\pg_admin.php on line 21
Olá , você está autenticado!
Leia tutoriais sobre session
Você não está usando session_start(). Sem isso, $_SESSION não existe mesmo.
session_destroy() é para destruir a sessão (apagar os cookies dela e os dados no servidor), como o próprio nome diz. Não tem nada a ver com banco de dados
E é bom usar um script anti-sql injetion:
http://forum.imasters.com.br/index.php?/topic/417752-como-evitar-sql-injection
//Conexão do mysql aqui
function anti_injection($str){
if (!is_numeric($str)) {
$str = get_magic_quotes_gpc() ? stripslashes($str) : $str;
$str = function_exists('mysql_real_escape_string') ? mysql_real_escape_string($str) : mysql_escape_string($str);
}
return $str;
}
$login = @anti_injection(@$_POST['login']);
$senha = @anti_injection(@$_POST['senha']);
if ((@preg_match('/\\\/', $login)) || (@preg_match('/\\\/', $senha)))
exit('Houve um erro na sua consulta.');
//Acho que tá certo agora
$sql = "SELECT * FROM login WHERE (login LIKE '$login' AND senha LIKE '$senha')";
E também não entendo o motivo de você destruir a sessão logo após criá-la. Essa parte de destruir sessão deve estar em um arquivo de logout.
sim tb tem um arquivo de LOGAUT
<?php
// isso aqui e para sair
include("conexao.php");
session_start();
unset($_SESSION['login']);
header("Location:index.php");
?>
cara mas ñ pecisa usar injection agora..
ou precisa?
>
cara mas ñ pecisa usar injection agora..
ou precisa?
Não precisa agora, mas já seria interessante você implementar tudo de que vai precisar, para depois não ter que fazer alterações difíceis.
Que eu saiba, o session destroy deve ficar na página de logout, e não na página de login. Porque ele está lá?
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
include("conexao.php");// arquivo de conexão com
// recuperando dados do form
$login = trim($_POST["login"]);
$senha = trim($_POST["senha"]);
// buscando no DB os dados conforme digitado no form
$sql = "SELECT * FROM login WHERE login = '$login' AND senha = '$senha'";
$res = mysql_query($sql);
if (mysql_num_rows($res)<= 0) // verificando se foi encontrado dados
{
echo "Login ou senha incorretos!<br />";
echo "Clique <a href=index.php >AQUI</a> para voltar e tentar novamente.";
exit;
}$_SESSION = mysql_fetch_array($res); // guardando dados na sessao
header("Location:pg_admin.php");
}
?>
Use o trim() para retirar os espaços em branco.
Também é aconselhavel armazenar a senha no BD criptografada para isso pode usar o md5()
espero que ajude
depois posta o resulatdo ai
flw
e para o logout
<?php
session_start();
session_unset();
session_destroy();
header('Location: index.php');
?>
flw
fiz da mesma forma q você disse mas ficou do mesmo jeito..
o problema e q ñ esta registrando o login e senha
tipo na pg_admin.php eu dei um Echo para ver o login logando...
os cogigos estao assim: e olha os comentarios...
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
include("conexao.php");// arquivo de conexão com banco de dados
$login = trim($_POST["login"]);
$senha = trim($_POST["senha"]);
$sql = "SELECT * FROM login WHERE login='$login' AND senha='$senha'";//erro nessa linnha.
$res = mysql_query($sql) or exit (mysql_error()) ;
// verificar se existe o login e senha
if(mysql_num_rows($res)<= 0)
{ //ate aki funciona esse mensagem e mostrada
echo "Login ou senha incorretos!<br />";
echo "Clique <a href=\"index.php\">AQUI</a> para voltar e tentar novamente.";
exit;
} $_SESSION = mysql_fetch_array($res);
header("Location:pg_admin.php");
exit;
}
?>
pagina depois do login e senha pg_admin.php
<a href="logout.php">Sair</a>
<DIV id="tudo">
<div id="topo">
<div id="topo">
<h6>ISSEC</h6>
<?php
include("conexao.php");
include("verifica.php");
echo "Olá ".$_SESSION['login'].", você está autenticado!";//erro nessa linha ñ aparece o nome de login..
?>
</div>
<div id="menu">
<td>
<tr><a href="?link=1">Home</a></tr>
//ETCCCCCCCCCCCCCCCC
pagina para cerifica se o usuario esta autentico..
<?php// arquivo para verificar se o usuario esta autentico..
include("conexao.php");
session_start("login");
if(!(session_is_registered("login") AND session_is_registered("senha")))
{
header("Location:index.php");
exit;
}
$login = $_SESSION['login'];
$senha = $_SESSION['senha'];
?>
e aki o LOGOUT
<?php
// isso aqui e para sair
include("conexao.php");
session_start();
session_unset();
session_destroy();
header('Location: index.php');
?>
>
>
cara mas ñ pecisa usar injection agora..
ou precisa?
Não precisa agora, mas já seria interessante você implementar tudo de que vai precisar, para depois não ter que fazer alterações difíceis.
Que eu saiba, o session destroy deve ficar na página de logout, e não na página de login. Porque ele está lá?
ERRO de codificação mas ja consertei!!
Na pagina pg_admin.php não aparece o nome do useruario
pq você não iniciou a sessao
no inicio da pagina coloque
<?php session_start(); ?>
na página de logout não é necessário incluir o banco de dados,
pois nela não será feito nada(consulta, insert, ...) com o Banco
flw
ham e mesmo e ..
mas ainda ñ apareceu meu nome de Login..
echo "Olá ".$_SESSION['login'].", você está autenticado!";
session_start(); vai iniciar id_login..na pagina?
Leia sobre session_is_registered:
http://php.net/manual/en/function.session-is-registered.php
O manual aconselha a não usar. Ela depedne da diretiva register_globals.
Prefira usar isset()
Você usa session_start() em verifica.php. Logo, não precisa dela de novo em pg_admin.php, já que você faz include de verifica.php
Dê um print_r() em $_SESSOIN depois do session_start. Isso mostrará todos os valores do array
si tem um login e senha..
fiz isso e apareceu:
Olá Array, você está autenticado!
echo "Olá ".$_SESSION.", você está autenticado!";
fiz aasim e apareceu o -id- do login 01
echo "Olá ".session_start().", você está autenticado!";
e com o mesmo erro de sempre!
Notice: A session had already been started - ignoring session_start() in C:\Arquivos de programas\EasyPHP\www\ISSEC\pg_admin.php on line 22
não é para dar ehco em $_SESSION. É para usr print_R
echo "<pre>";
print_r( $_SESSION );
echo "</pre>";
O erro apenas diz o que comentei antes: já usou session_start em verifica.php. Como você faz o include desse arquivo, não use session_start de novo em pg_admin.php
O erro apenas diz o que comentei antes: já usou session_start em verifica.php. Como você faz o include desse arquivo, não use session_start de novo em pg_admin.php
esssa parte eu entendi!!
mas print_r e para mudar o formato da letra..
<?php
include("conexao.php");
include("verifica.php");
echo "<pre>";
print_r( $_SESSION );
echo "</pre>";
?>
da erro da meesma forma!!
Notice: Undefined variable: _SESSION in C:\Arquivos de programas\EasyPHP\www\ISSEC\pg_admin.php on line 22
cara eu acho q tem alguma coisa errada na pagina de verifica.php
pq se eu for na barra de endereço e colocar..
pg_admin.php
eu consigo entrar...
e isso ñ deveria acontecer pq eu coloquei o include("verifica.php");
na pagina admin.php ?
um dos problemas é session_is_registered(). Troque por isset()
outra coisa: não pode haver saída ao navegador antes de hader(), setcookie() ou session_start(). Coloque o session_start() (ou o include do verifica.php) antes de qualquer HTML ou echo.
O print_r não é para mudar fonte:
Nesse caso a fuinção mostrará o conteúdo completo do array $_SESSION
pronto! coloquei isset :
ai se login ou senha ñ for setado volta pro index.php
<?php// arquivo para verificar se o usuario esta autentico..
include("conexao.php");
session_start("login");
if(!(isset("login") AND isset("senha")))
{
header("Location:index.php");
exit;
}
$login = $_SESSION['login'];
$senha = $_SESSION['senha'];
?>
as unicas saidas q tem e no logout.php na verifica.php
o certo é colocar a variável no parâmetro de isset:
isset( $_SESSION['login'] )
>
as unicas saidas q tem e no logout.php na verifica.php
em pg_admin.php você insere HTML entes de fazer include do verifica.php, que tem o session_start
op's
e dessa forma entao:
if(! isset( $_SESSION['login'] ) AND isset( $_SESSION['login'] ))
eu coloque depois do html dentro do <body>
<html>
<head>
<title>ISSEC</title>
<link rel="stylesheet" type="text/css" href="css.css"/>
</head>
<body bgcolor="silver">
<?php
include("verifica.php");
ini_set('display_errors', true);
error_reporting(E_ALL);
?>>
op's
e dessa forma entao:
if(! isset( $_SESSION['login'] ) AND isset( $_SESSION['login'] ))
Cuidado com parênteses e com os operadores. Seu Not está valendo só para o primeiro operando do AND. Faça assim:
if( !isset( $_SESSION['login'] ) OR !isset( $_SESSION['senha'] ) )
Você pretende redirecionar se ele não tiver usuário OU se não tiver senha. O OR força o usuário a ter os dois dados
>
eu coloque depois do html dentro do <body>
<html>
<head>
<title>ISSEC</title>
<link rel="stylesheet" type="text/css" href="css.css"/>
</head>
<body bgcolor="silver">
<?php
include("verifica.php");
ini_set('display_errors', true);
error_reporting(E_ALL);
?>
Mas é o contrário... :huh:
Note:
To use cookie-based sessions, session_start() must be called before outputing anything to the browser.
fonte: http://br3.php.net/session_start
session_start vem ANTES de QUALQUER saída ao navegador
ah sim eu tinha intedido depois do html
<?php include("conexao.php");?>
<html>
<head>
<title>ISSEC</title>//ETCC
E VERIFICA.php
<?php// arquivo para verificar se o usuario esta autentico..
include("conexao.php");
session_start("login");
if(! isset( $_SESSION['login'] ) OR !isset( $_SESSION['login'] ))
{
header("Location:index.php");
exit;
}
$login = $_SESSION['login'];
$senha = $_SESSION['senha'];
?>
mas cara a você sera desse erro eu coloco o login e senha
na pagina pg_admin.php da erro aki
<div id="topo">
<h6>ISSEC</h6>
<?php
echo "Olá ".$_SESSION['login'].", você está autenticado!";//erro nessa linha.
?>
</div>[code]
o erro diz a
[code]Notice: Undefined variable: _SESSION in C:\Arquivos de programas\EasyPHP\www\ISSEC\pg_admin.php on line 22
onde era para aparecer meu nome da esse erro....
Coloque o cód. do formulário e o cód. do arquivo conexao.php