Vnepomuceno Posted October 28, 2006 at 11:19 AM Report #60515 Posted October 28, 2006 at 11:19 AM Já existe um outro artigo sobre o login básico, mas como este é um bocado mais abrangente acerca das sessions e porque também aqui ficam algumas dúvidas esclarecidas de uma thread que foi posta aqui, aqui fica. (Retirado do Cine XL Blog, http://www.cinexl.net/blog/?p=85, de Valter Nepomuceno.) Usualmente numa aplicação Web, pode ser necessário que certos tipos de informação acompanhem o utilizador ao longo da sua estadia no site, de modo a que estejam sempre disponíveis a ser usados em qualquer página em que o utilizador se encontre. Nestes casos específicos, é recomendável que a aplicação Web utilize sessões para melhor gerir as informações de cada utilizador. Uma das principais vantagens das sessões, é que as variáveis de sessão ($_SESSION["variável"]), podem ser usadas para guardar variáveis e/ou informações referentes ao utilizador, sem que seja preciso utilizar includes para que estas estejam disponíveis em quantas páginas forem precisas, pois as variáveis de sessão são globais, ou seja, desde que a sessão seja iniciada, podem ser utilizadas sem qualquer outro procedimento. Após estas variáveis de sessão serem definidas, sendo variáveis globais, como já foi referido, vão permanecer até que essa sessão acabe. Isto garante que cada utilizador possa apenas consultar e manejar os dados referentes a si mesmo. Agora vamos a um pouco de código. Para que em cada página seja indicado que as variáveis de sessão vão ser precisas, é usado o: session_start(); Para que seja indicada à aplicação Web de que a sessão deve terminar, deve ser usado o seguinte código (uma sessão também terminará caso o browser seja encerrado): session_destroy(); Desta maneira, assim que a página interprete o script que indica que deve ser iniciada a sessão (o script deve ser colocado logo no início da página, de modo a que seja interpretado da mais rápida forma possível) esta é iniciada automaticamente, e as variáveis de sessão estarão logo disponíveis a ser usadas: <? session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" > <html> <head> <title></title> </head> <body> </body> </html> A definição de variáveis de sessão funciona da seguinte maneira: $_SESSION["nome da variavel"] = valor; Por exemplo, caso a sessão inicie depois de terem sido validados certos dados num formulário, é importante que esses dados, como por exemplo o nome de usuário e a password, sejam guardados em variáveis de sessão. Se o nome de usuário e a password forem inseridos numa input box, então, o código do formulário será: <form action="action.php" method="post"> Username: <input type="text" name="usuario" /><br /> Password: <input type="password" name="password" /><br /> <input type="submit" value="Validar" /> </form> Agora a acção do formulário: //A variavel pre-definida $_POST["nome do elemento de formulario"] vai receber os dados inseridos no formulario e grava-los como $usuario e $password $usuario = $ _POST["usuario"]; $password = $ _POST["password"]; //Vou fazer a validacao atraves de uma if statement para nao prolongar muito o artigo. E aconselhavel que usem uma tabela na vossa base de dados para guardarem os dados de utilizador if($usuario == "Carlos" & $password == "12345") { session_start(); $_SESSION["usuario"] = $usuario; $_SESSION["password"] = $password; echo "Sessao iniciada"; } else { echo "A sessao nao foi iniciada!"; } Agora, para realmente testar se a sessão foi iniciada correctamente, podemos escrever uma página, index.php sendo que: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title></title> </head> <body> <? echo $_SESSION["usuario"]; echo $_SESSION["password"]; ?> </body> </html> E caso a sessão tenha iniciado correctamente, será mostrado na página index.php o seguinte resultado: Carlos 12345 É necessário para a segurança da aplicação Web fazer o seguinte procedimento. Em cada página que seja iniciada a sessão através do session_start(), é recomendável que se introduza também o seguinte código: session_start(); //A funcao isset(); verifica se a variavel em questao existe ou nao, retornando um valor true ou false, caso a variavel exista ou nao if(isset($_SESSION["usario"])) { } else { ? > //Caso a funcao isset verifique que nao existe a variavel de sessao usuario, retornando o valor false, a pagina e reencaminhada para a pagina de login <script language="javascript" >window.location="login.php";< /script > <? } Este pequeno truque é muito importante se se quer salvaguardar as páginas unicamente restritas a usuários validados, para evitar que utilizadores, através de links directos, consigam visitar a página sem serem validados. Poderia estar aqui o dia todo a dar dicas sobre como melhorar as sessões, mas como o importante mesmo é aprender o básico e depois aplicar a cada caso segundo a inteligência (caso existente 😄 ) de cada um, ficamos-nos por aqui. Bons programas 😉
karva Posted October 28, 2006 at 11:24 AM Report #60518 Posted October 28, 2006 at 11:24 AM bom post 😄 poe o geshi para se ver melhor Proud LEIC-A@IST student!
Vnepomuceno Posted October 28, 2006 at 09:43 PM Author Report #60634 Posted October 28, 2006 at 09:43 PM Já meti o GeSHi. Digam o que acham do tutorial para saber se vale a pena quando fizer outro para o meu blog, postá-lo aqui.
hasta Posted November 3, 2006 at 03:25 PM Report #61875 Posted November 3, 2006 at 03:25 PM // A variavel pre-definida $_POST["nome do elemento de formulario"] vai receber os dados // inseridos no formulario e grava-los como $usuario e $password $_POST["usuario"] = $usuario; $_POST["password"] = $password; Não quererás dizer: $usuario = $_POST["usuario"]; $password = $_POST["password"]; Uma nota: Como disse o Vnepomuceno, A funcao isset(); verifica se a variavel em questao existe ou nao, retornando um valor true ou false, caso a variavel exista ou nao Se a variável estiver vazia e existir, retorna true. Por exemplo, se se clicar no submit sem se ter preenchido os campos, vai retornar true. Peço desculpa pelo off-topic, mas como é um problema que muita gente tem, achei por bem esclarecer. Bom trabalho, Vnepomuceno. Obrigado. : ) ~hasta
-IceBurn- Posted November 3, 2006 at 08:55 PM Report #61955 Posted November 3, 2006 at 08:55 PM Uma nota: Como disse o Vnepomuceno, A funcao isset(); verifica se a variavel em questao existe ou nao, retornando um valor true ou false, caso a variavel exista ou nao Se a variável estiver vazia e existir, retorna true. Por exemplo, se se clicar no submit sem se ter preenchido os campos, vai retornar true. Acrescento, é por isso que na maior parte das vezes deve utilizar-se a função empty() Exemplo simples: <?php $x = ""; if (empty($x)) echo "A variavel nao tem nehum valor definido!"; else echo "Ninguem chega a ver isto"; ?>
Vnepomuceno Posted November 4, 2006 at 12:47 PM Author Report #62035 Posted November 4, 2006 at 12:47 PM Não quererás dizer: $usuario = $_POST["usuario"]; $password = $_POST["password"]; Não é exactamente a mesma coisa?? Em relação ao que disseram, acho que essa situação não pode acontecer, porque o $_SESSION["usuario"] so é criado se o $_POST["usuario"] for igual à pesquisa de usuário correspondente à password, numa base de dados. Logo se o usuário for vazio, na base de dados não vai haver nenhuma password a que corresponda um usuário vazio, e a sessão não será iniciada, e a $_SESSION["usuario"] não será igual a $_POST["usuario"] Estou certo?
Gurzi Posted November 4, 2006 at 02:35 PM Report #62059 Posted November 4, 2006 at 02:35 PM Não é igual pois estás a atribuir á variavel global algo que exista em $utilizador, como sao atribuidos valores random a variaveis que não tem valor o $_POST['utilizador'] terá um valor desconhecido. Ao contrário seria correcto. Podes dar continuação agora ao tutorial mas usando Base de Dados !
hasta Posted November 4, 2006 at 03:33 PM Report #62069 Posted November 4, 2006 at 03:33 PM Não quererás dizer: $usuario = $_POST["usuario"]; $password = $_POST["password"]; Não é exactamente a mesma coisa?? Não, é como o Gurzi disse. Ao fazeres $variavel_um = $variavel_dois; Estás a atribuir à $variavel_um o valor que está na $variavel_dois, nunca o contrário. Em relação ao que disseram, acho que essa situação não pode acontecer, porque o $_SESSION["usuario"] so é criado se o $_POST["usuario"] for igual à pesquisa de usuário correspondente à password, numa base de dados. Logo se o usuário for vazio, na base de dados não vai haver nenhuma password a que corresponda um usuário vazio, e a sessão não será iniciada, e a $_SESSION["usuario"] não será igual a $_POST["usuario"] Estou certo? Sim, no caso desse algoritmo nunca acontece. A nota que fiz foi só uma informação adicional à função isset(), não para o teu caso em particular. ~hasta
Vnepomuceno Posted November 5, 2006 at 03:45 PM Author Report #62217 Posted November 5, 2006 at 03:45 PM Peço desculpa, isto são os hábitos da Matemática (se x=y, então, obviamente y=x) Obrigado pelo reparo 😉
samuca Posted January 17, 2007 at 01:59 PM Report #76851 Posted January 17, 2007 at 01:59 PM Só uma pequena questão. Para utilizar sessões é necessário ter as register globals on? Ou posso tê-las desligadas? samuca.freehostia.com
djthyrax Posted January 17, 2007 at 02:56 PM Report #76859 Posted January 17, 2007 at 02:56 PM Só uma pequena questão. Para utilizar sessões é necessário ter as register globals on? Ou posso tê-las desligadas? As register_globals na minha opinião deviam estar sempre off pois só servem para abrir uns "buraquitos" 👍 Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!
samuca Posted January 17, 2007 at 04:23 PM Report #76879 Posted January 17, 2007 at 04:23 PM Só uma pequena questão. Para utilizar sessões é necessário ter as register globals on? Ou posso tê-las desligadas? As register_globals na minha opinião deviam estar sempre off pois só servem para abrir uns "buraquitos" 👍 Pois eu sei desses buracos. Eu só fiz aquela pergunta porque vi isto escrito. Uma das principais vantagens das sessões, é que as variáveis de sessão ($_SESSION[variável]), podem ser usadas para guardar variáveis e/ou informações referentes ao utilizador, sem que seja preciso utilizar includes para que estas estejam disponíveis em quantas páginas forem precisas, pois as variáveis de sessão são globais, ou seja, desde que a sessão seja iniciada, podem ser utilizadas sem qualquer outro procedimento. Após estas variáveis de sessão serem definidas, sendo variáveis globais, como já foi referido, vão permanecer até que essa sessão acabe. Tenho que ter as register_globals on para trabalhar com sessões? Ou podem estar desligadas? samuca.freehostia.com
kingless Posted January 17, 2007 at 05:42 PM Report #76908 Posted January 17, 2007 at 05:42 PM Não precisas de ter o register_globals para trabalhar com sessões.
djthyrax Posted January 17, 2007 at 09:06 PM Report #76964 Posted January 17, 2007 at 09:06 PM Tenho que ter as register_globals on para trabalhar com sessões? Ou podem estar desligadas? Eu respondi-te: ... só servem para abrir uns "buraquitos" 😄 👍 Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!
samuca Posted January 17, 2007 at 10:42 PM Report #77004 Posted January 17, 2007 at 10:42 PM ok, obrigado pela informação... eu ainda não percebo muito de php e ando agora a começar. samuca.freehostia.com
djthyrax Posted January 18, 2007 at 05:46 PM Report #77095 Posted January 18, 2007 at 05:46 PM ok, obrigado pela informação... eu ainda não percebo muito de php e ando agora a começar. A gente está aqui para te ajudar 👍 Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now