• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Vnepomuceno

Sessions

44 mensagens neste tópico

Como ainda percebo muito pouco de sessions, estou a desenvolver uma esteriotipada e muito simples para depois inserir no meu site de uma forma mais elaborada, mas não estou a conseguir nada.

O "sistema" contém 3 ficheiros: o login.php que contem o formulário, o action.php, que contem a acção do formulário, e o admin.php caso o login seja bem sucedido.

Login.php:

<form action="action.php" method="post">
Username:<br /> <input type="text" value="" name="username" size="30" /><br /><br />
Password:<br /> <input type="password" value="" name="password" size="30" /><br /><br />
<input type="submit" value="Login Username" name="validate" /> <input type="reset" value="Reset" name="reset" />
</form>

Action.php:

<?
$username=$_POST["username"];
$password=$_POST["password"];

$connect=mysql_connect("localhost", "root","") or die ("Error on trying to connect server");

$database_connect=mysql_select_db("cinelnet_designlab", $connect) or die ("Error on trying to connect database");

$search="select password from login_userdata where username='$username';";

$result=mysql_query($search);

$num=mysql_num_rows($result);

if($num!=0) { 
while(list($pass)= @ mysql_fetch_row($result))
{  
   $query=$pass;
}

if($query==$password)
{ 
     ?> <script language="JavaScript">window.location="admin.php";</script> <? ;
}
else 
{
     ?> <script language="JavaScript">window.location="dl/index.php";</script> <? ;
}
}

else {
  
}

mysql_close($connect);

?>

Admin.php:

<?
session_start();
include(action.php);
$_SESSION['username']=$username;
?>

Não seria suposto ao fazer o login, aparecer em admin.php o Username?

Aparecem-me todos estes erros:

Notice: Use of undefined constant action - assumed 'action' in d:\programas\easyphp1-8\www\admin.php on line 3

Notice: Use of undefined constant php - assumed 'php' in d:\programas\easyphp1-8\www\admin.php on line 3

Warning: main(actionphp): failed to open stream: No such file or directory in d:\programas\easyphp1-8\www\admin.php on line 3

Warning: main(): Failed opening 'actionphp' for inclusion (include_path='.;D:/Programas/EasyPHP1-8\php\pear\') in d:\programas\easyphp1-8\www\admin.php on line 3

Notice: Use of undefined constant login - assumed 'login' in d:\programas\easyphp1-8\www\admin.php on line 4

Notice: Use of undefined constant php - assumed 'php' in d:\programas\easyphp1-8\www\admin.php on line 4

Warning: main(loginphp): failed to open stream: No such file or directory in d:\programas\easyphp1-8\www\admin.php on line 4

Warning: main(): Failed opening 'loginphp' for inclusion (include_path='.;D:/Programas/EasyPHP1-8\php\pear\') in d:\programas\easyphp1-8\www\admin.php on line 4

Notice: Undefined variable: username in d:\programas\easyphp1-8\www\admin.php on line 5

Já agora, alguém me poderia explicar melhor a parte do $_SESSION['username']=$username; no admin.php?

Valter Nepomuceno

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O erro esta no ficheiro  "admin.php" a seguinte linha esta errada

include(action.php);

Tem que ser:

include('action.php');

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, realmente mais de metade dos problemas foram-se :P

Apenas ficaram estes dois:

Notice: Undefined index: username in d:\programas\easyphp1-8\www\action.php on line 2
Notice: Undefined index: password in d:\programas\easyphp1-8\www\action.php on line 3

Já agora podes me explicar melhor essa parte do $_SESSION['username']=$username; sff?

Obrigado pela ajuda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, realmente mais de metade dos problemas foram-se :D

Apenas ficaram estes dois:

Notice: Undefined index: username in d:\programas\easyphp1-8\www\action.php on line 2
Notice: Undefined index: password in d:\programas\easyphp1-8\www\action.php on line 3

Já agora podes me explicar melhor essa parte do $_SESSION['username']=$username; sff?

Obrigado pela ajuda

basicamente vais dizer à variável de sessão 'username' que o seu valor é igual à variável (normal, sem ser de sessão) 'username' :D

Cumps :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

acedeste primeiro ao ficheiro login.php e preencheste os respectivos campos?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim.

Já agora para que servem as sessions? Apenas para fazer echo(); dos dados de login?

É que o que eu pretendia mesmo era um "sistema" em que fosse feito o login e caso fosse validado, redireccionaria para admin.php.

E queria que se caso o utilizador nao estivesse logado, ao tentar aceder ao admin.php pelo link, fosse reconhecido que não estava validado e seria redireccionado para o login.php.

Podem me ajudar? Obrigado! Valter Nepomuceno

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aqueles dois erros estão a aparecer porque a variavel  username e a varivel password não estão definidas... Acho que para resolver este problema podes fazer o seguinte.

No ficheiro "action.php" na primeiras linhas tem este código

$username=$_POST["username"];

$password=$_POST["password"];

Apaga isso e coloca:

if(!empty( $_POST['username']) AND !empty( $_POST['password'] )) {

$username=$_POST["username"];

$password=$_POST["password"];

} else {

$username = "";

$password = "";

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É impossivel neste caso conseguires que o user seja visto no admin.php :D

Porquê? Porque só inicias uma sessão e mesmo essa é no file admin.php :D

Tens de iniciar a sessão nos dois lados e definir no action.php que $_SESSION["username"] = $_POST["username"];

Só depois de iniciares a sessão outra vez no admin.php é que fazendo echo $_SESSION["username"]; vais ter algum resultado :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É impossivel neste caso conseguires que o user seja visto no admin.php :)

Porquê? Porque só inicias uma sessão e mesmo essa é no file admin.php :)

Tens de iniciar a sessão nos dois lados e definir no action.php que $_SESSION["username"] = $_POST["username"];

Só depois de iniciares a sessão outra vez no admin.php é que fazendo echo $_SESSION["username"]; vais ter algum resultado :D

Não tem nada a ver...  $username = $_POST['username']; foi definido no ficheiro "action.php" e ele no ficheiro "admin.php" fez um include para o ficheiro "action.php" e iniciou a sessão e depois definiu $_SESSION['username'] com o valor da variavel $username  que foi definido no ficheiro "action.php" e por isso se ele fizer echo $_SESSION['username']; vai mostrar o username :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

My mistake :thumbsup: Não vi o include :D

São formas de programar diferentes :)

Btw any news com isso Vnepomuceno?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, tenho notícias, acabaram-se os erros, e tudo o resto. Depois da validação, a página admin.php aparece em branco. Não deveria aparecer alguma coisa como o $username?

Expliquem-me uma coisa que eu não percebi ainda e ainda ninguém me explicou:

$_SESSION['mas+que+porcaria+é+que+deve+vir+aqui+dentro'] = $username //Já agora porque é que se iguala a $username?

Desculpem lá as perguntas, mas é que enquanto não perceber perfeitamente o código, não vou conseguir continuar, não consigo estar a desenvolver algo que não percebo.

Valter Nepomuceno

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, tenho notícias, acabaram-se os erros, e tudo o resto. Depois da validação, a página admin.php aparece em branco. Não deveria aparecer alguma coisa como o $username?

Expliquem-me uma coisa que eu não percebi ainda e ainda ninguém me explicou:

$_SESSION['mas+que+porcaria+é+que+deve+vir+aqui+dentro'] = $username //Já agora porque é que se iguala a $username?

Desculpem lá as perguntas, mas é que enquanto não perceber perfeitamente o código, não vou conseguir continuar, não consigo estar a desenvolver algo que não percebo.

Valter Nepomuceno

Para tirares as tuas duvidas tens que aprender PHP http://pt.php.net/manual/

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

As sessions são usadas para assegurar que existe uma sessão única para cada utilizador, ou seja por exemplo, imagina que o utilizador Admin tem acesso a um espaço só dele, logo depois de ser verificado a password e o username será criado uma session no qual tu atribuis o nome que quiseres por exemplo $_SESSION['soeuentro'] = $username ;

As sessions são muito importantes nos sistemas de login, tendo também a alternativa de usar cookies (mas que normalmente pode ser problemático, visto ao utilizador ter os cookies desactivados.

Se puder ajudar em algo mais, apita, abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Gurzi, a explicação ajuou muito :thumbsup:

Mas o meu código no admin.php é:

session_start();
include('action.php');
$_SESSION['admin']=$username;

Não deveria aparecer qualquer coisa como o meu username (Vnepomuceno), que é o username de login?

A página aparece toda em branco!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não devia não, não tens lá nada que te mande informação em troca...

mete no admin.php um echo $username; por exemplo, vais ver que te aparece qualquer coisa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não, ao meter echo($username); não me aparece absolutamente nada.

Entao o $_SESSION[admin]=$username; serve para que? para informar que qualquer username que se logue in (lol) é logado numa sessão intitulada admin?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é só dizer que o valor da variável da sessão que foi iniciada aquando da autenticação do utilizador ('admin') tem o mesmo valor que a variável 'username'.

ou seja, vai ter o valor do nome do utilizador que for posto no formulário principal, isto se passar pela autenticação.

escreve lá no fim do script:

echo $_SESSION['admin'];

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tanto

echo($username);

echo($_SESSION['admin']);

Não retornam nada. Haverá algum problema com o script global?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

escreve só:

echo $_SESSION['admin'];

não ponhas parêntesis, não sei até que ponto é que é possivel fazer isso com o echo, por isso faz como eu meti aí :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nop. Cheira-me que seja um problema no script, na globalidade. Mas se alguma coisa está errada, primeiro o login não deveria ser validado, segundo, deveria aparecer alguma mensagem de erro, mas simplesmente aparece tudo em branco, não percebo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se chega até à admin.php é porque validadou, mas se não te dá erro quando fazes o echo é porque a variável está a branco, o que não é possível se não não tinhas validado e não tinhas chegado ao admin.php ...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é assim eu acho que tu ao fazeres o include do actions.php não vai dar grande coisa, senão vejamos:

- ele pega nas variáveis de $_POST que foram enviadas anteriormente, ou seja, no caso da admin.php não vai receber nada :D

cria a session já no actions.php e experimenta (e tira o include ao actions.php)

Cumps :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não estou a perceber absolutamente nada disto tudo. Ainda nem percebi qual é a real utilidade das sessões.

Vou ler este artigo, e quando chegar a alguma conclusão, venho aqui dar noticias.

Digam-me só uma coisa. O que eu quero mesmo, é que ao ser validado o usuário, ele tenha acesso a determinadas páginas que um user não logado não tem, para isso, um user não logado, ao aceder a um link de uma página restrita, deveria ser redireccionado para a página de login. Isso é conseguido com as session??

Obrigado pela ajuda pessoal :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu também não consigo trabalhar com sessions dá-me estes erros que nunca tinha visto

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at base\index.php:3) in base\index.php on line 5

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at base\index.php:3) in base\index.php on line 5

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora