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

[PHP] sessions

Discussão em 'Web Development' iniciada por SlashString, 21 de Junho de 2008. (Respostas: 12; Visualizações: 886)

  1. SlashString

    SlashString Power Member

    Boas mais uma vez! Vou tentar ser o mais explícito e breve possível..
    Tenho um portal quase acabado, em que certos conteúdos são apenas para utilizadores registados.

    Imaginem a página de um portal, por exemplo, um qualquer index.php.. no topo tem um header que contem um formulário de login, com os campos username, password, OK button.
    Isto aparece em todas as páginas antes de o utilizador se registar. Depois de ele estar registado, eu redirecciono para uma qualquer página, e ele fica "logado" atraves de uma sessão. Tudo bem até aqui.. o problema é que se ele clicar num link qualquer para o index.php, apesar de ele estar ainda dentro da sessão (porque no index eu faço include do php da sessão), mas aparece na mesma o header com os campos para fazer login, o que não faz sentido nenhum.

    Eu já estive a tentar procurar solução, mas não encontrei.. Suponho que necessito fazer algo do género de "uma função" nesse header, em que faça algo como:
    Código:
    IF ( utilizador não se registou )
       mostrar campos de login;
    ELSE 
       apresentar mensagem da sessão [COLOR=silver]//Bem vindo User![/COLOR]

    Desde já obrigado,
    Cumps
     
  2. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Como é que tens o código?
     
  3. SlashString

    SlashString Power Member

    :wscared: desculpa.. o código de... ?

    Tenho algo como:

    index.php -- no topo da página, faço include de login.php
    login.php -- contem apenas pequeno formulário de login , username, pass....
    secret.php -- faço include de sessão... etc..

    se o utilizador estiver em secret.php, e clicar num link para o index.php, volta a aparecer no topo da pagina o formulário de login..


    :sad:
     
  4. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Não foi muito explícito :x
    Podes mostrar o código?
    Se o login.php mostrar o formulário, só fazes include dele se não houver nenhum user ligado.
    Fazes o session_start() antes de usares o $_SESSION pela primeira vez?
     
  5. hostmake

    hostmake Power Member

    Se não fazes unset, e tens o if da sessão.

    Será que não estás a fazer session_start(); ?
     
  6. SlashString

    SlashString Power Member

    Bom, eu colocava todo o código aqui, mas é imenso..
    Vou tentar definir o que talvez seja mais necessário:

    Tenho as páginas:
    index.php | auth.php

    No index.php, no topo da página, pretendo que apareça:
    SE (utilizador não tiver feito login) apresenta o formulário para login, campos user, pass, ok;
    SE (utilizador tiver feito login) apresenta "Olá user"

    tal como na imagem:
    [​IMG]



    auth.php:
    PHP:
    <? 
    // liga base dados
    include connectDB.php
     
    // inicia sessão
    session_start();  
     
     
    if(
    $_POST){ 
      
    $_SESSION['userid']=$_POST["userid"]; 
      
    $_SESSION['password']=$_POST["password"];   

     
     
    $result=mysql_query("select * from plus_signup where userid='" $_SESSION['userid'] . "' and password='" $_SESSION['password'] . "'"); 
     
    $num=mysql_num_rows($result);  
     
    if(
    $num 1){ 
      echo 
    "   
      <form action=\"index.php\" method=\"post\">
            <label>
              <span class=\"style10\"><span class=\"style9\">Login</span></span>
              <input name=\"userid\" type=\"text\" class=\"style2\" >
              &nbsp;&nbsp;<span class=\"style10\">Password</span> 
              <input name=\"password\" type=\"password\" class=\"style2\" >
              </label>
            <span class=\"style10\">&nbsp;
            <input name=\"Submit\" type=\"submit\" class=\"style2\" value=\"Ok\">
            &nbsp;&nbsp;|&nbsp;Ainda n&atilde;o &eacute; Cliente? <a href=\"signup.php\">Registar</a> |</span>
          </form>"

     }
     else { 
     echo 
    "Bem vindo <b>$_SESSION[userid]</b>. <a href=logout.php>Faça logout aqui!</a>";  
       }
      exit;  
    ?>

    Obrigado mais uma vez desde já pela ajuda!

    Cumps
     
    Última edição: 23 de Junho de 2008
  7. Gurzi

    Gurzi Power Member

    Primeiro que tudo, o session_start() deve ser sempre a primeira instrução a ser chamada.

    Segundo, guardares a password de um utilizador na sessão é DE DOIDOS. Não podes fazer isso man, guarda antes o id dele, ou cria uma simples variavel a dizer se está logado ou não.

    depois na página inicial só tens de fazer

    if($_SESSION['nome']){
    // nao mostra login
    }else{

    //mostra login
    }
     
  8. hostmake

    hostmake Power Member

    se for uma hash, não tem mal.

    aliás, sistema de cookies, eu normalmente, guardo partes especificas da hash da pass, parte essa que depende da length do username.
     
  9. Gurzi

    Gurzi Power Member

    sim mas duvido que seja, ele está a associar logo os valores do post á session, portanto acho que ele está mesmo a guardar a palavra chave sem ser em hash.

    Mas também para te confessar, quando falei, nem me lembrei da hash . Bem visto :)



    Podes explicar melhor como fazes e o que é isso de guardar partes da hash e a dependência do lenght do username ?!
    Cumps
     
  10. hostmake

    hostmake Power Member

    $hash = "d41d8cd98f00b204e9800998ecf8427e";
    $user = strlen("Gurzi");
    $hash_user = substr($hash, $user, $user);


    é a base de um dos meus sistemas de cookies, é claro que para fazeres um sistema de cookies 100% seguro, é complicado...
     
    Última edição: 23 de Junho de 2008
  11. SlashString

    SlashString Power Member

    Correctíssimo! Jà modifiquei!

    Tens razão, estupidez mesmo:sad: .. Guardei apenas o id dele!

    Eu coloquei o código do IF no próprio auth.php, e chamei no index.php..
    Dá-me 2 erros possíveis.. ou apenas mostra o formulário, não mostrando o resto do conteúdo do index.php, ou dá o erro :
    "Warning: Cannot modify header information - headers already sent by ........"


    cumprimentos!
     
  12. m.costa

    m.costa Power Member

    Se mostrares a parte do código que esta' a dar problemas (neste caso o IF) e' bastante mais facil ajudar ;)
     
  13. djthyrax

    djthyrax Power Member

    Nunca se confia em cookies, o mais seguro é mesmo não os usar. Mas se é mesmo necessário, dás uma hash ao user identificativa da sessão, não metes lá info pelo meio para depois ires buscar. :)
     

Partilhar esta Página