1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Login n fnciona em todos os servidores

Discussão em 'Web Development' iniciada por Umbus, 16 de Outubro de 2007. (Respostas: 21; Visualizações: 1150)

  1. Umbus

    Umbus What is folding?

    Boas eu tenho um sistema de login em php, em que tenho na base de dados o user, a pass em md5 tudo em php. agora a mina duvida e a seguinte eu tenho esse sistema em dois servidores mas num nao me funciona igualzinho, algum pode-m dar um link de um login que funcione em todos os servidores?
     
  2. spastikman

    spastikman Banido




    Se está bem feito, é provavel que não funcione porque o SGBD deve estar a correr no localhost. logo o php alojado no mesmo server, corre. No outro servidor não corre.

    Se não quiseres/puderes abrir o serviço para o exterior, podes sempre autenticar via http (ou https para ser mais seguro).
     
  3. msdevweb

    msdevweb Power Member

    tens que tomar atençao a uma coisa, que tipo de "sessao" usa o teu sistema de login, se for autenticaçao com escrita e definiçoes em cookies deve funcionar perfeitamente, se for autenticaçao "simples" como session_start(), session['var']; tens que tomar atençao com as permissoes do php, porque dessa forma o php utiliza uma directoria no servidor para "session trash", e se nao tiveres essa directoria definida com as devidas permissoes simplesmente nao corre, ja que é incapaz de criar a sessao. Mesmo com cookies tens que ter atençao as variaveis definidas no php.ini do servidor.

    Caso o sistema funcione (sessoes) é sinal que tens algo mal definido. Se aparece algum erro mostra-o aqui.


    help @ http://www.php.net/session

    cumps
     
  4. Umbus

    Umbus What is folding?

    Antes demais obrigado pela ajuda, eu tenho o config bem :). Agora a unica diferença entre servidores e que o velho e a versao 4 e o novo a versao 5 :):
    login:
    <Form method="post" action="autentificar.php">
    Nome:
    <input type="text" name="utilizador"><br>
    Password:
    <input type="password" name="password"><br>
    <input type="submit" value="enviar dados">
    </form>


    Autentificar:
    <?
    include("config.php");
    $utilizador = mysql_real_escape_string($_POST[utilizador]);
    $password = mysql_real_escape_string($_POST[password]);
    $password = md5($password);
    $status = authenticate($utilizador, $password);
    if ($status == 1)
    {
    session_start();
    session_register("SESSION");
    session_register("SESSION_login");
    $SESSION_login = $utilizador;
    header("Location: administrar.php");
    exit();
    }
    else
    {
    header("Location: erro.php");
    exit();
    }
    function authenticate($outilizador, $apassword)
    {
    include("config.php");
    global $ligar;
    $connection = mysql_connect($host, $user, $pass) or die("Incapaz de conectar à base de dados!");
    mysql_select_db($db, $ligar) or die("Incapaz de selecionar à base de dados!");
    $query = "SELECT id from lusoanime_utilizador WHERE utilizador = '$outilizador' AND password = '$apassword'";
    $result = mysql_query($query, $ligar) or die ("Erro na query: $query. " . mysql_error());
    if (mysql_num_rows($result) == 1)
    {
    return 1;
    }
    else
    {
    return 0;
    }
    }
    ?>



    ADministrar:
    <?php
    session_start();
    if (!session_is_registered("SESSION"))
    {
    header("Location: erro.php");
    exit();
    }
    ?>
     
  5. msdevweb

    msdevweb Power Member

    ora ai esta o problema :P ou muito provavelmente...

    o session_register no php5 manda-te dar uma volta a nao ser que tenhas o register_globals definido, o que no php 5 esta por defeito desactivado, logo o session_register/unregister/is_registered nao funcionam..... o que te aconselho sera substituires o session_register("VARIAVEL") por $_SESSION['VARIAVEL']="valor_a_atribuir_a_variavel"; nao necessitas de registar variaveis... para verificares se uma variavel existe isas o if(isset($_SESSIO['VARIAVEL'])) {}

    com essas alteraçoes deve funcionar...

    depois diz se funcionou ou nao...

    p.s. nao é necessario fazeres 2 versoes do mesmo sistema, ja que o $_SESSION tambem funciona no php4 :) e alem disso é considerado "BEST PRACTICE".
    cumps.
     
    Última edição: 16 de Outubro de 2007
  6. K0mA

    K0mA Power Member

    Não sei se será isto:
    $utilizador = mysql_real_escape_string($_POST["utilizador"]);
    $password = mysql_real_escape_string($_POST["password"]);

    Se não funcionar mete assim:

    PHP:
    $utilizador $_POST["utilizador"];
    $password $_POST["password"];
    $utilizador mysql_real_escape_string($utilizador);
    $password mysql_real_escape_string($password);
    Se não funcionar...
     
    Última edição: 16 de Outubro de 2007
  7. msdevweb

    msdevweb Power Member

    K0mA :
    Provavelmente o problema é daquilo que falei, ja que o mysql_real_escape_string "pode" ser usado assim, e alem disso ele ja funcionava no php 4, logo o erro so pode ser por causa de um dos updates que o php5 trouxe...

    :p
    cumps.
     
  8. Umbus

    Umbus What is folding?

    Yupi, era exactamente isso msdevweb. Obrigadao pela ajuda, ja tava a desesperar :P. Agradecimentos a todos os que me ajudaram, K0mA obrigado pelo apoio ;).
     
  9. Umbus

    Umbus What is folding?

    Nop, afinal nao funciona, ele faz o login mas na administraçao ele entra mesmo que nao tenha sessao :S.

    <?php
    session_start();
    if (isset($_SESSION['SESSION_USERNAME']))
    {
    header("Location: erro2.php");
    exit();
    }
    ?>
     
    Última edição: 16 de Outubro de 2007
  10. msdevweb

    msdevweb Power Member

    olha la bem a lógica do que tens escrito em cima... lol :)
    se a variavel $_SESSION['SESSION_USERNAME'] estiver definida, manda-se o user para erro2.php este erro é uma pagina de erro no login certo? Estranho nao? lol devia ser precisamente o contrario. Esperimenta colocar um !antes do isset, algo como
    <?php
    session_start();
    if (!isset($_SESSION['SESSION_USERNAME'])) //quer dizer se nao estiver definida :) aí é que se manda o user para erro2.php
    {
    header("Location: erro2.php");
    exit();
    }
    ?>
     
  11. Umbus

    Umbus What is folding?

    Agora o administrador esta bom ele nao vai para a administraçao sem fazer o login, o problema e que ele vai directamente ao erro2. Ou seja ele faz o login correctamente mas quando vai ao admin parece que vai sem sessao:

    login:
    <form action="autentificar.php" method="post">
    <p>Utilizador:<br />
    <input type="text" size="20" name="utilizador" />
    <br />
    Password:<br />
    <input type="password" size="20" name="password" />
    <br />
    <input type="submit" name="submit" value="Login">
    </p>
    </form>



    Autentificar:
    <?
    include("config.php");
    $f_user = mysql_real_escape_string($_POST[utilizador]);
    $f_pass = mysql_real_escape_string($_POST[password]);
    $f_pass = md5($f_pass);
    $status = authenticate($f_user, $f_pass);

    // if user/pass combination is correct
    if ($status == 1)
    {
    session_start();
    $_SESSION["SESSION_USERNAME"] = $f_user;
    header("Location: administrar.php");
    exit();
    }
    else
    // user/pass check failed
    {
    // redirect to error page
    header("Location: erro.php");
    exit();
    }

    // authenticate utilizador/senha against a database
    // returns: 0 if utilizador and senha is incorrect
    // 1 if utilizador and senha are correct
    function authenticate($theuser, $thepass)
    {
    // configuration variables
    include("config.php");
    global $ligar;

    //connect to database
    $ligar = @mysql_connect($host, $user, $pass) or die("Incapaz de conectar à base de dados!");

    //select database
    @mysql_select_db($db, $ligar) or die("Incapaz de selecionar à base de dados!");

    //query string
    $query = "SELECT id from blogumbus_utilizador WHERE utilizador = '$theuser' AND password = '$thepass'";

    //store query in a variable
    $result = @mysql_query($query, $ligar) or die ("Erro na query: $query. " . mysql_error());

    // if row exists -> user/pass combination is correct
    if (mysql_num_rows($result) == 1)
    {
    return 1;
    }
    // user/pass combination is wrong
    else
    {
    return 0;
    }
    }
    ?>


    O uqe se passara? :S
     
  12. msdevweb

    msdevweb Power Member

    "o problema e que ele vai directamente ao erro2"

    isso acontece quando???

    no administrar.php so tens que ver se !isset($_SESSION['SESSION_USERNAME']) e pode ainda ver o length da variavel da sessao. algo como:

    session_start();

    //para efeitos de debug faz:
    echo "S_USER: ".$_SESSION['SESSION_USERNAME'];
    echo "<br />S_STRLEN:".strlen($_SESSION['SESSION_USERNAME']);

    if(!isset($_SESSION['SESSION_USERNAME']) || strlen($_SESSION['SESSION_USERNAME'])<1 || $_SESSION['SESSION_USERNAME']==null) header("Location: erro2.php");

    esperimenta assim para ver no que dà.


    cumps.
     
  13. Umbus

    Umbus What is folding?

    Acontece quando faço o login e vou para aadministraçao...O erro nao e um bug :(. Ele nao tem a sessao feita quando esta na admin. Ele assim da o mesmo erro, e so com o primeiro codigo nao aparece nada:
    S_USER:
    S_STRLEN:0
     
    Última edição: 19 de Outubro de 2007
  14. msdevweb

    msdevweb Power Member

    Ouve... nao leves a mal, mas a tua duvida esta cada vez mais estranha (e as tusa explicaçoe ainda pioram tudo...)
    tens o session_start(); em todas as paginas que usam as variaveis da sessao? no autenticar.php e administrar.php ?? se tens isso era suposto funcionar, e se mesmo assim nao funciona, é porque a sessao nao esta a ser criada... estas a usar isso no localhost ou online? tens que ter atençao às variaveis do php.ini, vê: http://php.net/session e verifica se esta tudo como deve estar, para teres acesso as variaveis do php, cria um .php com <?php php_info(); ?> executa e confirma as variaveis.

    cumps.
     
  15. Umbus

    Umbus What is folding?

    Eu estou a fazer isto na net, Bem entao eu esplicao melhor e mais pausadamente :). Primeiro de tudo faço o login que esta feito assim:
    PHP:
    <form action="autentificar.php" method="post">
    <
    p>Utilizador:<br />
    <
    input type="text" size="20" name="utilizador" />
    <
    br />
    Password:<br />
    <
    input type="password" size="20" name="password" />
    <
    br />    
    <
    input type="submit" name="submit" value="Login">
    </
    p>
    </
    form>
    Depois ele vai para autentificar.php onde verifica se o login e falso ou nao, e verifica na base de dados, caso o login seja verdadeiro ele faz uma nova sessao com o nome do login:
    PHP:
       include("config.php");
    $f_user mysql_real_escape_string($_POST[utilizador]);
    $f_pass mysql_real_escape_string($_POST[password]);
    $f_pass  md5($f_pass);
    $status authenticate($f_user$f_pass);

      if (
    $status == 1)
        {
        
    session_start();
         
    $_SESSION["SESSION_USERNAME"] = $f_user;
        
    header("Location: administrar.php");
        exit();
        }
    else
        {
        
    header("Location: erro.php");
        exit();
        }
    function 
    authenticate($theuser$thepass)
        {
        include(
    "config.php");
        global 
    $ligar;
        
    $ligar = @mysql_connect($host$user$pass) or die("Incapaz de conectar à base de dados!");
        @
    mysql_select_db($db$ligar) or die("Incapaz de selecionar à base de dados!");
        
    $query "SELECT id from blogumbus_utilizador WHERE utilizador = '$theuser' AND password = '$thepass'";
        
    $result = @mysql_query($query$ligar) or die ("Erro na query: $query. " mysql_error());
        if (
    mysql_num_rows($result) == 1)
            {
            return 
    1;
                   }
        else
            {
            return 
    0;
            }
        }
    Depois desta parte ele vai para uma pagina de erro caso o login esta incorrecto, ou para a pagina administrativa caso o login esta incorrecto. Dentro da pagina de administração ele verifica se tenho a sessao iniciada:
    PHP:
    session_start();
    if (isset(
    $_SESSION['SESSION_USERNAME']))
        {
        
    header("Location: erro2.php");
        exit();
        }
        include(
    "config.php");
    E e aqui que em vez de continuar na administraçao nao fica, e como se a sessao nao tivesse sido criada (como ja foi visto).
     
  16. AliFromCairo

    AliFromCairo Power Member

    Tu nesse caso estás a redireccionar o utilizador no caso de a sessão já ter sido criada. Penso que o que tu queres fazer é precisamente o contrário.
     
  17. msdevweb

    msdevweb Power Member

    Epah... ja te tinha dito que na pagina administrativa tinhas que mudar aquilo, como o AliFromCairo disse e como eu ja tinha dito mais em cima:

    tens if(isset($_SESSION['SESSION_USERNAME'])) envias para o erro2.php, outra vez: estas a dizer se a variavel da sessao estiver registada o user vai para o erro2.php, logo isto nao tem logica... como te disse:

    if(isset($_SESSION['SESSION_USERNAME'])) tem que levar a condiçao negativa (!):

    if(!isset($_SESSION['SESSION_USERNAME'])) {

    }

    Ve la se assim nao funciona.

    cumps.
     
  18. Umbus

    Umbus What is folding?

    Eu e que me enganei, eu ja tinha feito o que tinhas dito o admin esta assim:

    PHP:
    session_start();

    //para efeitos de debug faz:
    echo "S_USER: ".$_SESSION['SESSION_USERNAME'];
    echo 
    "<br />S_STRLEN:".strlen($_SESSION['SESSION_USERNAME']);

    if(!isset(
    $_SESSION['SESSION_USERNAME']) || strlen($_SESSION['SESSION_USERNAME'])<|| $_SESSION['SESSION_USERNAME']==nullheader("Location: erro2.php");
    Será que ele nao apaga o registo da sessao quando vai para a administraçao?
     
  19. msdevweb

    msdevweb Power Member

    Bem... ou sou eu que estou a ficar burro ou tens que ter alguma coisa mal configurada no php.ini que impede a tua sessao de ser criada... ja que nao me parece existir algum erro no codigo que mostras... ah... onde tens:
    if ($status == 1)
    {
    session_start();
    $_SESSION["SESSION_USERNAME"] = $f_user;
    header("Location: administrar.php");
    exit();
    }

    tira o session_start(); de dentro do if. e coloca-o no inicio do documento. de resto ja nao sei o que pode estar mal... ve o site que te disse em cima e confirma as variaveis.

    cumps.
     
  20. SoundSurfer

    SoundSurfer Power Member

    Por acaso tens algum "_" no url?
    É que as cookies não funcionam bem com underscores nos urls.
     

Partilhar esta Página