Jump to content

Como verificar sessão com classes?


Volans
 Share

Recommended Posts

Olá,

O que eu procuro é o seguinte, numa página protegida colocava algo do género:

<?php

 $verificar->login();

 // Código se estiver logado

?>

E caso não estivesse logado voltava para a página inicial...

Obrigado pela ajuda.

Edited by Volans
Link to comment
Share on other sites

perguntas uma coisa e mostras outra 😕

no metodo login, caso ele nao esteja logado, fazes redirect

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

Sei. Acho que já estou a ver...

<?php

class X
{

 function Login()
 {

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

header("Location: index.php");

  }

 }

}

$verificar = new X;

?>

É algo deste género, certo?

Depois é só chamar na página em questão com:

$verificar->Login();
Edited by Volans
Link to comment
Share on other sites

fizeste session_start()?

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

faz antes algo do género

<?php
class X
{
function __construct(){//construtor
 session_start();
}
public function Login(){
 //fazes o login propiamente dito
 $_SESSION['utilizador'] = 'Nome do Utilizador, id, o que tu queiseres passar';
}
public function isLoggedIn(){
 return (isset($_SESSION['utilizador'])) ? true: false;
}
}

$verificar = new X();
if($verificar->isLoggedIn()){
 header("Location: index.php");
}
Edited by MASNathan
Link to comment
Share on other sites

nao sei se o session_start como construtor seja boa ideia, se ele criar o objecto depois de terem sido enviado as headers, ira' ter problemas.

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

nao sei se o session_start como construtor seja boa ideia, se ele criar o objecto depois de terem sido enviado as headers, ira' ter problemas.

pois isso nao sei... ainda nao fiz qualquer tipo de testes

EDIT: podes substituir o session_start por isto

if (!isset($_SESSION)) {
 session_start();
}

´so para o caso de chamares noutro lado

Edited by MASNathan
Link to comment
Share on other sites

Eu já vou experimentar. Outra questão:

Eu tenho um ficheiro com as classes e funções e incluo-o no ficheiro index.php, se eu utilizar nesse ficheiro "$mostrar->tpl(inicio)" (por exemplo) funciona, mas se no ficheiro inicio.tpl.php (que é chamado corretamente anteriormente) utilizar também "$mostrar->tpl(sobre)" e dá erro se incluir o ficheiro que tem as classes e as funções (diz que estou a chamar as classes duas vezes) e se eu não incluir diz que estou a chamar a função tpl fora de um objeto...

Alguém sabe como remediar isto? (eu sei que sabem 🙂 )

Link to comment
Share on other sites

Eu já vou experimentar. Outra questão:

Eu tenho um ficheiro com as classes e funções e incluo-o no ficheiro index.php, se eu utilizar nesse ficheiro "$mostrar->tpl(inicio)" (por exemplo) funciona, mas se no ficheiro inicio.tpl.php (que é chamado corretamente anteriormente) utilizar também "$mostrar->tpl(sobre)" e dá erro se incluir o ficheiro que tem as classes e as funções (diz que estou a chamar as classes duas vezes) e se eu não incluir diz que estou a chamar a função tpl fora de um objeto...

Alguém sabe como remediar isto? (eu sei que sabem 🙂 )

usa o include_once em vez do include

ou o require_once em vez do require

Link to comment
Share on other sites

nao sei se o session_start como construtor seja boa ideia, se ele criar o objecto depois de terem sido enviado as headers, ira' ter problemas.

o problema nem sequer é esse. porque isso já é problema de falta de conhecimento do funcionamento de sessões.

agora imagina isto:

$verificar1 = new X();
$verificar2 = new X(); // levas logo com um warning

este tipo de acção deverá se)r implementado com singleton's

(aproveitando o código atrás

class X {
 protected static $_singleton;

 protected function __construct(){//construtor
   session_start();
 }

 public static function singleton() {
   if (self::$_singleton == null)
     self::$_singleton = new X();
   return self::$_singleton;
 }

 public function Login(){
   //fazes o login propiamente dito
   $_SESSION['utilizador'] = 'Nome do Utilizador, id, o que tu queiseres passar';
 }

 public function isLoggedIn(){
   return (isset($_SESSION['utilizador'])) ? true: false;
 }
}

$verificar1 = X::singleton();
$verificar2 = X::singleton(); // levas com o mesmo objecto, logo só uma chamada a session_start()
if($verificar1->isLoggedIn()){
 header("Location: index.php");
 die(); // <------------------ não esquecer terminar o script quando se redirecciona
}
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

este tipo de acção deverá se)r implementado com singleton's

Era a melhor maneira, mas penso que seja uma solucao um pouco "avancada" para este tipo de problemas, porque isso nao evita que as headers sejam eviadas antes de criar a "instance".

Era muito mais facil escrever a linha session_start(); no inicio de cada ficheiro, ou fazer include ao ficheiro que faca algumas operacoes(uma delas iniciar a session)

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.