Ir para conteúdo
Fórum Script Brasil
  • 0

sessions


Diogo Freitas

Pergunta

boas tardes,

resolvi criar um sistema de login com session e não utilizar cookies.

está td bom. porém, o mesmo colocando include "valida_session.php" nas páginas secretas ele não obdece, ou seja, qualquer um pode entrar?

será que é por utilizar id?

os códigos...

valida session

<?php
session_start();
if(isset($_SESSION["login_usuario"]) AND isset($_SESSION["senha_usuario"])) {
    $login_usuario = $_SESSION["login_usuario"];
    $senha_usuario = $_SESSION["senha_usuario"];
}else{
echo "Login não efectuado";
echo "<a href='../emprego.php>volatr a tentar</a>";
exit();
}

if(!(empty($login_usuario) OR empty($senha_usuario)))
{
$cn = mysql_connect("localhost", "emprego", "240490");
mysql_select_db("emprego");
$resultado = mysql_query("select * from user_empresa where login = '$login_usuario'");

if(mysql_num_rows($resultado) == 1)
{
    if($senha_usuario != mysql_result($resultado, 0, "senha"))
    {
        unset ($_SESSION["nome_usuario"]);
        unset ($_SESSION["senha_usuario"]);
        echo "Login não efectuado";
        exit();
    }
}else{
    unset ($_SESSION["nome_usuario"]);
    unset ($_SESSION["Senha_usuario"]);
    echo "Login não efectuado";
    exit();
}
}
else{
echo "Login não efectuado";
exit();
}
mysql_close($cn);
?>
login
<?php
$login = $_POST['login'];
$senha = $_POST['senha'];

$cn = mysql_connect("localhost", "emprego", "240490");
mysql_select_db("emprego");

$resultado = mysql_query("select * from user_empresa where login = '$login'");
$resultado_senha = mysql_query("select * from user_empresa where senha = '$senha'");
$linhas = mysql_num_rows($resultado);
$linhas_senha = mysql_num_rows($resultado_senha);
$sql = mysql_query("select id from user_empresa where login = '$login'");

if($linhas == 0)
{
echo "Usuário não encontrado";
echo "<a href='../emprego.php'>voltar a tentar</a>";
} else {
    if($linhas_senha == 0)
    {
    echo "Senha errada";
    echo "<a href='../emprego.php'>voltar a tentar</a>";
    }else{
    session_start();
    $_SESSION["login_usuario"] = $login;
    $_SESSION["senha_usuario"] = $senha;
    
    while($x = mysql_fetch_assoc($sql)){
    header("Location: empresa_user.php?id=".$x['id']."");
    }
    }
}
mysql_close($cn);

?>
na página secreta
<?
include "valida_session.php";
  ?>
logout
<?php
session_start();
$_SESSION = array();
session_destroy();
header("Location: ../emprego.php");
?>

obrigado,

abraço

Link para o comentário
Compartilhar em outros sites

25 respostass a esta questão

Posts Recomendados

  • 0

consegui por a funcionar, só está a dar um problema.

eu preciso que cada user apenas tenha acesso restrito à sua página. Com o código que fiz depois de logado cada user pode entrar em qualquer página restrita.

Fiz-me entender?

como posso fazer isso?

abraço e muito origado

Link para o comentário
Compartilhar em outros sites

  • 0

Amigão, usa um raciocínio simples, como faz pra restringir? Você verifica se algo existe, por exemplo:

if(!isset($_SESSION['user'])){
echo 'Você não está logado';
exit;
}
Então, como você faz para restringir a apenas um usuário? Verifica se aquele usuário tem algum condição, única, por exemplo, guarde o ID do cara em uma sessão e verifica se ele tem aquela ID específica, ou seja, se você tem três páginas, a.php, b.php e c.php, e quer que apenas os IDs 1,2,3 entrem respectivamente nas páginas você colocaria. a.php
if($_SESSION['id_user'] != 1){
echo 'Você não tem permissão pra acessar a página';
exit;
}
b.php
if($_SESSION['id_user'] != 2){
echo 'Você não tem permissão pra acessar a página';
exit;
}
c.php
if($_SESSION['id_user'] != 3){
echo 'Você não tem permissão pra acessar a página';
exit;
}

Pronto, na página a.php só vai entrar quem tiver o valor de 1 gravado na sessão, na página b.php quem tiver o valor de 2 na sessão e na c.php quem tiver o valor de 3 na sessão.

Pronto, é só uma questão de parar meio segundo pra pensar...

Link para o comentário
Compartilhar em outros sites

  • 0

seria algo assim?

<?php
session_start();
$login = $_POST['login'];
$cn = mysql_connect("localhost", "emprego", "240490");
mysql_select_db("emprego");
$id_user = mysql_query("select id from user_empresa where login = '$login'");

if($_SESSION['id_user'] != $id_user){
echo '<center>Você não tem permissão pra acessar a página</center>';
echo "<center><a href='../emprego.php'>voltar a tentar</a></center>";
exit;
}

if(isset($_SESSION["login_usuario"]) AND isset($_SESSION["senha_usuario"])) {
    $login_usuario = $_SESSION["login_usuario"];
    $senha_usuario = $_SESSION["senha_usuario"];
    $id_user       = $_SESSION["id_user"];
}else{
echo "<center>Login não efectuado</center>";
echo "<center><a href='../emprego.php'>voltar a tentar</a></center>";
exit();
}

if(!(empty($login_usuario) OR empty($senha_usuario)))
{
$cn = mysql_connect("localhost", "emprego", "240490");
mysql_select_db("emprego");
$resultado = mysql_query("select * from user_empresa where login = '$login_usuario'");

if(mysql_num_rows($resultado) == 1)
{
    if($senha_usuario != mysql_result($resultado, 0, "senha"))
    {
        unset ($_SESSION["nome_usuario"]);
        unset ($_SESSION["senha_usuario"]);
        unset ($_SESSION["id_user"]);
        echo "<center>Login não efectuado</center>";
        echo "<center><a href='../emprego.php'>voltar a tentar</a></center>";
        exit();
    }
}else{
    unset ($_SESSION["nome_usuario"]);
    unset ($_SESSION["Senha_usuario"]);
    unset ($_SESSION["id_user"]);
    echo "<center>Login não efectuado</center>";
    echo "<center><a href='../emprego.php'>voltar a tentar</a></center>";
    exit();
}
}
else{
echo "<center>Login não efectuado</center>";
echo "<center><a href='../emprego.php'>voltar a tentar</a></center>";
exit();
}
mysql_close($cn);
?>
login:
<?php
$login = $_POST['login'];
$senha = $_POST['senha'];

$cn = mysql_connect("localhost", "emprego", "240490");
mysql_select_db("emprego");

$resultado = mysql_query("select * from user_empresa where login = '$login'");
$resultado_senha = mysql_query("select * from user_empresa where senha = '$senha'");
$linhas = mysql_num_rows($resultado);
$linhas_senha = mysql_num_rows($resultado_senha);
$id_user = mysql_query("select id from user_empresa where login = '$login'");

if($linhas == 0)
{
echo "<center>Usuário não encontrado</center>";
echo "<center><a href='../emprego.php'>voltar a tentar</a></center>";
} else {
    if($linhas_senha == 0)
    {
echo "<center>Senha errada</center>";
echo "<center><a href='../emprego.php'>voltar a tentar</a></center>";
    }else{
    session_start();
    $_SESSION["login_usuario"] = $login;
    $_SESSION["senha_usuario"] = $senha;
    $_SESSION["id_user"]       = $id_user;
    
    while($x = mysql_fetch_assoc($id_user)){
    header("Location: empresa_user.php?id=".$x['id']."");
    }
    }
}
mysql_close($cn);

?>

abraço. me parece mais ou menso correcto

Link para o comentário
Compartilhar em outros sites

  • 0

sendo assim não é este o erro....

eu tou a pegar o $login através de $_POST['login']...

a questão é....a página que valida a sessão não é a página para a qual o user envia a info.

ou seja, o user colca a pass e user e esta info vai ser enviada para a página login, e da página login vai para a valida....

posso fazer $_POST sendo que não postei imediatamente antes o user?

Editado por Diogo Freitas
Link para o comentário
Compartilhar em outros sites

  • 0

a questão é a seguinte, ele tá a pegar as variáveis todas. se o user não digitar senha nem user (se for ao browse e digitar directo o endereço da página não entra) mas se o user estiver logado e digitar directo no browse o endereço da página de outro user é permitida a entrada...

deste género:

www.uttil.com/empresa_user.php?id=5 (empresa com nome x)

www.uttil.com/empresa_user.php?id=6 (empresa com nome y)

se o x estiver logado e digitar www.uttil.com/empresa_user.php?id=6 (empresa com nome y) então eçle consegue entrar na página do y.

Link para o comentário
Compartilhar em outros sites

  • 0

e eu fiz isso:

<?php
$cn = mysql_connect("localhost", "emprego", "240490");
mysql_select_db("emprego");

$login = $_POST['login'];
$senha = $_POST['senha'];

$resultado = mysql_query("select * from user_empresa where login = '$login'");
$resultado_senha = mysql_query("select * from user_empresa where senha = '$senha'");
$linhas = mysql_num_rows($resultado);
$linhas_senha = mysql_num_rows($resultado_senha);
$id_user = mysql_query("select id from user_empresa where login = '$login'");
$id_user_linhas = mysql_num_rows($id_user);

if($linhas == 0)
{
echo "<center>Usuário não encontrado</center>";
echo "<center><a href='../emprego.php'>voltar a tentar</a></center>";
} else {
    if($linhas_senha == 0)
    {
echo "<center>Senha errada</center>";
echo "<center><a href='../emprego.php'>voltar a tentar</a></center>";
    }else{
    session_start();
    $_SESSION["login_usuario"] = $login;
    $_SESSION["senha_usuario"] = $senha;
    $_SESSION["id_user_usuario"]       = $id_user;
    
    while($x = mysql_fetch_assoc($id_user)){
    header("Location: empresa_user.php?id=".$x['id']."");
    }
    }
}
mysql_close($cn);

?>

Link para o comentário
Compartilhar em outros sites

  • 0

3 querys? Diogo, dá uma pesquisada no google, pois esse teu sistema de login não tem a menor lógica... mas se quiser continuar a usar ele, boa sorte, bom, só ressaltando que você não está salvando o id do cara, porque olha só...

$id_user = mysql_query("select id from user_empresa where login = '$login'");
.....
$_SESSION["id_user_usuario"]       = $id_user;
Com a query você pegou o ID, mas ai você precisa obter os resultados que vieram da query... use mysql_fetch_assoc, como eu sei que você vai perguntar como usa já vou colocar...
$id_user = mysql_query("select id from user_empresa where login = '$login'");
$dados_da_ultima_query = mysql_fetch_assoc($id_user);
....
$_SESSION["id_user_usuario"]       = $dados_da_ultima_query['id'];

Link para o comentário
Compartilhar em outros sites

  • 0

a lógica que o ESerra disse, acho que ele se referiu à forma como você faz para "pegar" os dados e compará-los...

tipo, você quer verificar se há o determinado login no banco certo? basta fazer isso...

$login = $_POST["login"];

$sql = mysql_query("SELECT * FROM tabela WHERE login = '$login'");
if(mysql_num_rows($sql) > 0) {
     // aqui todas as ações para o usuário logado
}
else {
     echo "dados inválidos";
}

Link para o comentário
Compartilhar em outros sites

  • 0

No caso tem que verificar se login existe, se a senha está correta, dá pra fazer as duas coisas de uma vez na mesma query, além do que, pegar os dados vindo de um form e jogar direto na query é pedir pra ter problema, pesquise sobre a função mysql_real_escape_string e sql injection...

Link para o comentário
Compartilhar em outros sites

  • 0

pelo que tive a ler a função mysql_real_escape_string permite tornar mais seguro o sistema de login pois impede certos caractéres ne?

ou seja, poderei usála para as variáveis login e senha....

relativamente á utilização de uma query para verificar o login e a senha penso que já vi como usar:

$query = "select * from db where login = '{$login}' AND senha = '{$senha}'";

Link para o comentário
Compartilhar em outros sites

  • 0

modifiquei o login e mantive a parte valida_session

<?php
$cn = mysql_connect("localhost", "delipoli_users", "users");
mysql_select_db("delipoli_users");

$login = $_POST['login'];
$senha = $_POST['senha'];
$login_escape = addslashes($login);
$senha_escape = addslashes($senha);

$resultado = mysql_query("select * from users where login = '{$login_escape}' AND senha = '{$senha_escape}'");

$linhas = mysql_num_rows($resultado);

$id = mysql_query("select id from users where login = '{$login_escape}'");
$id_fetch = mysql_fetch_assoc($id);

if($linhas == 0)
{
echo "<center>Usuário não encontrado ou senha errada</center>";
echo "<center><a href='../areareservada.php'>voltar a tentar</a></center>";
}else{
    session_start();
    $_SESSION["login_usuario"] = $login_escape;
    $_SESSION["senha_usuario"] = $senha_escape;
    $_SESSION["id_usuario"]    = $id_fetch['id'];

    header("Location: empresa_user.php?id=".$id_fetch['id']."");
    
}
mysql_close($cn);

?>

está a funcionar, mas gostaria de saber a sua opinião acerca da segurança e saber se estas alterações que fiz aumentam a segurança

abraço e obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

boas tardes novamente,

surgiu-me um pequeno problema.

quando adiciono o include valida_session.php noutra página já após ter sido feita a validação do user dá erro. terei que fazer outro valida_session para validar a entrada após a validação inicial?

isto está um pouco confuso, imaginem a página secreta.php. quando o user se valida vai para a pagina secreta.php. até ai beleza. agora, se dessa página ele kiser ir para a secreta2.php ai tem o acesso negado.

abraços

Link para o comentário
Compartilhar em outros sites

  • 0

crie outra valida_session

será que tem segurança suficiente?

<?php
session_start();

if(!(empty($login_usuario) OR empty($senha_usuario)))
{
$cn = mysql_connect("localhost", "delipoli_users", "users");
mysql_select_db("delipoli_users");
$resultado = mysql_query("select * from users where login = '$login_usuario'");

if(mysql_num_rows($resultado) == 1)
{
    if($senha_usuario != mysql_result($resultado, 0, "senha"))
    {
        unset ($_SESSION["login_usuario"]);
        unset ($_SESSION["senha_usuario"]);
        unset ($_SESSION["id_usuario"]);
        echo "<center>Login não efectuado</center>";
        echo "<center><img src='../../gif/perigo.png' /></center><p>";
        echo "<center><a href='../areareservada.php'>voltar a tentar</a></center>";
        exit();
    }
}else{
    unset ($_SESSION["login_usuario"]);
    unset ($_SESSION["senha_usuario"]);
    unset ($_SESSION["id_usuario"]);
    echo "<center>Login não efectuado</center>";
    echo "<center><img src='../../gif/perigo.png' /></center><p>";
    echo "<center><a href='../areareservada.php'>voltar a tentar</a></center>";
    exit();
}
}
else{
echo "<center>Login não efectuado</center>";
echo "<center><img src='../../gif/perigo.png' /></center><p>";
echo "<center><a href='../areareservada.php'>voltar a tentar</a></center>";
exit();
}
mysql_close($cn);
?>

Link para o comentário
Compartilhar em outros sites

  • 0

Diogo Freitas, mostre aum pingo de educação para com os outros usuários do fórum, você sem nenhum tipo de constrangimento vive dando UPs nos seus tópicos, quando você quiser inserir uma nova informação utilize o botão EDITAR: p_edit.gif, como eu já te dei outros avisos e você pelo visto gosta disso, a partir de agora, simplesmente vou começar a fechar os seus tópicos. Lembre-se, utilizar o fórum é um privilégio e não um direito.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,7k
×
×
  • Criar Novo...