PHP - Fazer login.

PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.

Moderadores: Administradores, Moderadores

PHP - Fazer login.

Mensagempor Elohim » Segunda Jun 30, 2003 20:29

Boas! :)

Estou a fazer um pequeno projecto que permite aceder a uma BD (Oracle) através da net. Para as interfaces do utilizador estou a usar PHP. Preciso de ajuda para o "login". Após dar o username e a password eu crio uma sessão, com session_start(). Como faço agora para passar a session id, ou outras variáveis, para outras páginas? Já tentei registar variáveis com session_register( "nome-da-var"), mas quando as tento aceder de outra página, usando o mesmo session id não consigo obter o seu valor.
Alguém me pode ajudar? Basicamente preciso só do processo de fazer login....

Obrigado.
Elohim
Membro de Prata
Membro de Prata
 
Mensagens: 105
Registado: Quinta Mar 13, 2003 22:40

Mensagempor alfatek » Segunda Jun 30, 2003 23:43

na página onde crias a sessão:

session_start();
$_SESSION['logado'] = 1;

nas páginas seguintes onde queres aceder à var:
echo $_SESSION['logado']; // por exemplo...

can't be easier... Se tiveres problemas posta o código completo que tens da parte de sessions que é mais fácil de ver o problema.
alfatek
Administrador
Administrador
 
Mensagens: 3257
Registado: Sábado Abr 06, 2002 18:28
Localização: Coimbra

Mensagempor Elohim » Terça Jul 01, 2003 15:02

Eu ainda faço confusão com as sessions. Então quando um dado utilizador (seja "$username", com um "$userID" correspondente), quando faço session_start(), faço

$_SESSION[ "$username" ] = $userID;
Quando faço session_destroy(), a variável é eliminada, certo?

Nas restantes páginas para saber se efectuou login basta agora fazer
if isset($_SESSION[ "$username" ]) FazqqCoisa()
?

Vou ver se assim já dá! Obrigado.
Elohim
Membro de Prata
Membro de Prata
 
Mensagens: 105
Registado: Quinta Mar 13, 2003 22:40

Mensagempor Elohim » Terça Jul 01, 2003 16:24

Bom, parece que ainda não consigo... :(

Aqui estão os ficheiros de logon, após ter sido verificada a password:
(parte da "session" assinalada a vermelho...)
P.S. Peço desculpa por todo este código. Depois posso apagá-lo...

--------------------------------- Authenticate.php -----------------------

<?php
include 'message.php'; // show_message, GoBack

//echo "<p align=center><strong>A estabelecer liga&ccedil;&atilde;o com a BD...</strong><p>\n";

$user = $_REQUEST[ 'user' ];
$user = strtolower($user);
$password = $_REQUEST[ 'CipheredPass' ];


$CONN = ODBC_CONNECT("XXXXXXX","XXXXXXX","XXXXXXX");
$QUERY = "SELECT users_name, ciphered_Password, users_id FROM users where users_name like '$user'";


$RES = ODBC_DO($CONN, $QUERY);

$NBOF = ODBC_FETCH_ROW($RES);

$saved_user = ODBC_RESULT($RES, 1);
$saved_password = ODBC_RESULT($RES, 2);
$user_id = ODBC_RESULT($RES, 3);

//echo "<p> $saved_user: $saved_password</p>\n";

session_start();

echo '<br><br><br><center><h2><b><font color="navy">Resultado:</font></b><font color="navy"><br></font></h2>';

if(!$NBOF){
show_message("Erro:", "red", "<p>N&atilde;o existe o utilizador '$user'.</p>\n");
echo "<br><center>";
GoBack("<strong>Voltar</strong>");
exit();
}
else
if (authenticate($user, $password, $saved_user, $saved_password)){

show_message("Sucesso:", "blue", "<strong>Login efectuado.</strong>\n");

session_cache_limiter('private');
$cache_limiter = session_cache_limiter();

/* set the cache expire to 60 minutes */
session_cache_expire (60);
$cache_expire = session_cache_expire();



//session_register("$user");
$_SESSION[ "$user" ] = $user_id;
$_SESSION[ 'logon' ] = 1;
//$_SESSION[ session_id() ] = $user_id;
/**/
printf("<p>Session Id: %s<p>", session_id());
echo "A sessão expira ao fim de $cache_expire minutos, ou com ao efectuar logout.<br>";
echo "Variável $user: ". $_SESSION[ "$user" ]."<br>" ;
// echo "Variável ". session_id(). ": ". $_SESSION[ session_id()]."<br>" ;
$sid = session_id();
// header("Location: /9224/attach.php?sid=$time");
// session_destroy();
// echo "Depois de destruida... Variável ". session_id(). ": ". $_SESSION[ session_id()]."<br>" ;
/**/
echo "<p><a href=/9224/attach.php>Enviar Ficheiro</a><p>";

}
else{
show_message("Erro:", "red", "<strong>Password inv&aacute;lida.</strong>\n");
echo "<br><center>";
GoBack("<strong>Voltar</strong>");
exit();
}


ODBC_FREE_RESULT($RES);
ODBC_CLOSE($CONN);


function authenticate($user, $pass, $saved_user, $saved_password)
{
return (($user == $saved_user) && ($pass == $saved_password));
}


?>


--------------------FIM do Authenticate.php -----------------------


-------------------- Attach.php -----------------------


<script language="JavaScript">
<!--
function Mostrar(file)
{
if (file.value == ''){
alert('Seleccionar um ficheiro.');
return false;
}

//alert('Ficheiro: ' + file.value);
return true;
}
//-->
</script>



<?php

$logged = isset($_SESSION[ 'logon' ]);
if ($logged) echo "Logged: $logged";
// Esta variável não está definida!!!


//if isset($_SESSION[ '1' ])
// echo "User ID: $_SESSION[ 1 ]";

//if ( $logged and )echo "User ID: ";
//$sid = = $_REQUEST[ 'sid' ];
//echo "- ".$_SESSION[ $sid]."<p>"; */
?>

<center><br><br><br>
<h3><b><font color="navy">Ficheiro de texto com a BD:</font></b><font color="navy"><br>
</font>
</h3>
<table width="200" border="1" height="10" BGCOLOR=#BBEEFF bordercolor="#FFFFFF"
bordercolorlight="#FFFFFF" bordercolordark="#AADDFF">
<form name="form" enctype="multipart/form-data" method="post" action="Mostrar.php" onSubmit="return Mostrar(filename)">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="5000000">
<tr >
<td width="40%" height="33" align="right" valign="middle" BGCOLOR=#99CCEE>
<p><b>Ficheiro:&nbsp</b></p></td>
<td width="60%" height="40" align="center" valign="middle">
<div align="center">
<input name="userfile" type="file" size="15" maxlength="15">
</div></td>
</tr>
<td width="40%" height="47" align="right" valign="middle" BGCOLOR=#99CCEE><b>Validar:&nbsp</b></td>
<td width="60%" height="40" align="center" valign="middle" nowrap>
<div align="center">
<input type="submit" name="Submit" value="Enviar" >
<input type="reset" name="Clear" Value="Limpar">
</div>

</form>
</table>

-------------------------------- Fim do Authenticate.php ---------------


O que estarei a fazer mal?
Elohim
Membro de Prata
Membro de Prata
 
Mensagens: 105
Registado: Quinta Mar 13, 2003 22:40

Mensagempor alfatek » Terça Jul 01, 2003 19:16

His,

Antes de mais tens de me dizer o erro k dá... e o que querias obter porque não estou a perceber o:

$logged = isset($_SESSION[ 'logon' ]);
if ($logged) echo "Logged: $logged";

não estou a perceber o pk do echo à var logged que tem um valor booleano vindo do isset... mas ok... Calculo que o problema seja ele nunca fazer o echo "Logged: $logged"; ?

logo a seguir a essas linhas escreve:
echo '<pre>';
print_r($_SESSION);
echo '</pre>';

E isto mostra.te as variaveis de sessão que estão disponiveis e seus respectivos valores, se isso não te ajudar no debug então posta outra vez o código actual... mas por favor reduz o código para as partes k interessam ;) e de modo a k eu possa testar (isto é tira a parte da DB e mete mesmo variaveis "à bruta" só mesmo para testar ;) )

P.S. porquê usar $_REQUEST ? n é mto melhor usar $_GET, $_POST ou $_COOKIE conforme o caso?
alfatek
Administrador
Administrador
 
Mensagens: 3257
Registado: Sábado Abr 06, 2002 18:28
Localização: Coimbra

Mensagempor alfatek » Terça Jul 01, 2003 19:24

Ok, só mesmo metendo num editor de texto é que dá pra ler código ;)

no attach.php não fizeste session_start(); o que é preciso para poderes aceder às variaveis da sessão ;)
alfatek
Administrador
Administrador
 
Mensagens: 3257
Registado: Sábado Abr 06, 2002 18:28
Localização: Coimbra

Mensagempor Elohim » Quarta Jul 02, 2003 14:42

Ois!

alfatek Escreveu:His,

Antes de mais tens de me dizer o erro k dá... e o que querias obter porque não estou a perceber o:

$logged = isset($_SESSION[ 'logon' ]);
if ($logged) echo "Logged: $logged";

não estou a perceber o pk do echo à var logged que tem um valor booleano vindo do isset... mas ok... Calculo que o problema seja ele nunca fazer o echo "Logged: $logged"; ?



Antes de mais, muito obrigado pela ajuda! ;)
O echo é apenas para debug, para eu verificar se a variável $logged está instanciada. Antes tinha apenas "echo "Logged: $logged"; "
para ele imprimir "Logged: true" ou "Logged: false", consoante o seu valor.

alfatek Escreveu:P.S. porquê usar $_REQUEST ? n é mto melhor usar $_GET, $_POST ou $_COOKIE conforme o caso?

Já não me lembro bem o porquê, mas acho que com o $_GET não estava a conseguir aceder às variáveis passadas pelo "form". Bom, só há pouco comecei a programar em PHP...

Vou testar as tuas sugestões. Provavelmente foi por não ter usado o session_start no attach.
Elohim
Membro de Prata
Membro de Prata
 
Mensagens: 105
Registado: Quinta Mar 13, 2003 22:40

Mensagempor Elohim » Quarta Jul 02, 2003 16:47

Resolvido!!! :D

Parece que o problema é que o sid não é passado de forma transparente entre as diferentes páginas, por isso tenho que o passar no URL.

------------------------ 1.php -----------------------------

<?
@session_start();
@session_register("teste");
$teste = "ola";

echo '<pre>';
print_r($_SESSION);
echo '</pre>';

?>
<a href="2.php?<?=SID?>">Proximo</a>


-------------------------- Fim de 1.php -----------------------

-------------------------- 2.php -----------------------


<?
@session_start();
echo $teste;

echo '<pre>';
print_r($_SESSION);
echo '</pre>';

?>


-------------------------- Fim de 2.php -----------------------


Output do 2:

ola
Array
(
[teste] => ola
)
Elohim
Membro de Prata
Membro de Prata
 
Mensagens: 105
Registado: Quinta Mar 13, 2003 22:40

Mensagempor alfatek » Quarta Jul 02, 2003 21:52

só se tens o php mal configurado pk o php trata de o passar correctamente....

será que a dir temp do php está mal configurada logo ele não csg guardar os dados da sessão?
alfatek
Administrador
Administrador
 
Mensagens: 3257
Registado: Sábado Abr 06, 2002 18:28
Localização: Coimbra

Mensagempor Elohim » Quinta Jul 03, 2003 18:09

alfatek Escreveu:só se tens o php mal configurado pk o php trata de o passar correctamente....

será que a dir temp do php está mal configurada logo ele não csg guardar os dados da sessão?


É isso mesmo. :) Parece que o PHP não foi configurado com "enable-trans-sid ", daí não passar os sid de forma transparente...
Elohim
Membro de Prata
Membro de Prata
 
Mensagens: 105
Registado: Quinta Mar 13, 2003 22:40


Voltar para Programação

Quem está ligado:

Utilizador a ver este Fórum: Nenhum utilizador registado e 1 visitante

cron