canepazzojoe
02-08-2013, 16:48
Buonasera a tutti.
Ho un grosso problema con un logout;
Premessa:
Non ho potuto sfruttare i consigli che avete già dato perchè il mio problema riguara un sito internet un pò più complesso rispetto a gli altri.
perchè più complesso?Perchè uso MVC e in più invece di "buttare" tutto il codice in 2-3 pagine uso "classi e oggetti" , tipo programmazione object oriented quindi diciamo che è lungo da trovare come errore e secondo me è anche un errore stupido che ho commesso.
Il codice è molto grezzo perchè prima vorrei farlo funzionare poi magari andrei a raffinarlo.Per ora anche per questo motivo, non uso il DB preferisco che funzioni tutto senza per poi convertire tutto.
Veniamo al codice:
Per fare il logout uso questa funzione:
protected function logout($lc){
$_SESSION = array();
if (session_id() != '' || isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 2592000, '/');
}
session_unset(); //
session_destroy();
$this->showLoginPage($lc);
}
Ovviamente credo che senza la funzione per fare il login non mi sappiate dire dove sbaglio quindi vi inserisco un pò di codice e spero di farvi capire come funziona e se funziona quello che sto facendo; per prima cosa ovviamente questa funzione è usata solo dalla classe dove è contenuta o dalle figlie; seconda cosa che vi può essere utile , vi do un pò di codice:
Questa è la classe che sceglie che come "riempire" la pagina indice:
<?php
include_once basename(__DIR__).'/../Modello/CreatoreUtenti.php';
include_once basename(__DIR__).'/../Modello/Utente.php';
include_once basename(__DIR__).'/../Vista/LayoutCreator.php';
//classe di controllo che gestisce le parti in comune tra tutti
//i controlli e gestisce gli utenti non registrati
class SuperControl{
public function __construct() {
}
//questa funzione gestisce le pagine richieste dall'utente
public function requestGestor(&$request,&$session){
//creo il creatore di layout ( O_o)
$lc=new LayoutCreator();
//controllo se è stato ricevuto un comando
if(isset($request["cmd"])){
//se il comando ricevuto è "login" allora...
if($request["cmd"]=='login'){
if(isset($session["user"])){
$user=$session["user"];
//una volta controllato se la richiesta per l'utente è
////stata settata poso controllare se è un utente valido
if($user->isAUser())
$this->setHomeUtente($lc);
//in tutti gli altri casi mostro la pagina di login
else
$this->setLoginPage($lc);
}else {
$this->setLoginPage($lc);
}
}
else if($request["cmd"]=='login'){
$this->logout($lc);
}
else
$this->setLoginPage($lc);
}else {
if($this->logged())
$this->setHomeUtente($lc);
else
$this->setLoginPage($lc);
}
require basename(__DIR__) . '/../Vista/masterpage.php';
}
protected function setHomeUtente($lc) {
$user = $_SESSION['user'];
switch ($user->getRuolo()) {
case User::compratore:
$lc->setTitle("Benvenuto/a nella home compratore!");
$lc->setHeader(basename(__DIR__).'/../Vista/compratore/logo.php');
$lc->setCenter(basename(__DIR__).'/../Vista/compratore/quadroc.php');
$lc->setLeftBar(basename(__DIR__).'/../Vista/compratore/lside.php');
$lc->setFooter(basename(__DIR__).'/../Vista/compratore/ppagina.php');
break;
case User::commerciante:
$lc->setTitle("Benvenuto/a nella home commerciante!");
$lc->setHeader(basename(__DIR__).'/../Vista/commerciante/logo.php');
$lc->setCenter(basename(__DIR__).'/../Vista/commerciante/quadroc.php');
$lc->setLeftBar(basename(__DIR__).'/../Vista/commerciante/lside.php');
$lc->setFooter(basename(__DIR__).'/../Vista/commerciante/ppagina.php');
break;
case User::amministratore:
$lc->setTitle("Benvenuto/a nella home amministratore!");
$lc->setHeader(basename(__DIR__).'/../Vista/amministratore/logo.php');
$lc->setCenter(basename(__DIR__).'/../Vista/amministratore/quadroc.php');
$lc->setLeftBar(basename(__DIR__).'/../Vista/amministratore/lside.php');
$lc->setFooter(basename(__DIR__).'/../Vista/amministratore/ppagina.php');
break;
default :
$this->setLoginPage($lc);
}
}
public function setLoginPage(&$lc){
$lc->setTitle("Effettua il login! ");
$lc->setHeader(basename(__DIR__).'/../Vista/login/logo.php');
$lc->setCenter(basename(__DIR__).'/../Vista/login/quadroc.php');
$lc->setLeftBar(basename(__DIR__).'/../Vista/login/lside.php');
$lc->setFooter(basename(__DIR__).'/../Vista/login/ppagina.php');
}
//questa funzione controlla se l'utente è già loggato
protected function logged(){
if(isset($_SESSION["user"])){
$user=$_SESSION["user"];
if($user->isAUser())
return true;
else {
return false;
}
}else
return false;
}
protected function logout($lc){
$_SESSION = array();
if (session_id() != '' || isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 2592000, '/');
}
session_unset();
session_destroy();
$this->showLoginPage($lc);
}
}
?>
C'è una "masterpage" che viene esclusivamente riempita diciamo che è poco importante
spero vi basti come codice, altrimenti cerco di darvi tutto quello che vi serve
edit:forse vi serve anche come lo chiamo il logout:
<div class="logout">
<a href="indice.php?cmd=logout">Logout</a>
</div>
Ho un grosso problema con un logout;
Premessa:
Non ho potuto sfruttare i consigli che avete già dato perchè il mio problema riguara un sito internet un pò più complesso rispetto a gli altri.
perchè più complesso?Perchè uso MVC e in più invece di "buttare" tutto il codice in 2-3 pagine uso "classi e oggetti" , tipo programmazione object oriented quindi diciamo che è lungo da trovare come errore e secondo me è anche un errore stupido che ho commesso.
Il codice è molto grezzo perchè prima vorrei farlo funzionare poi magari andrei a raffinarlo.Per ora anche per questo motivo, non uso il DB preferisco che funzioni tutto senza per poi convertire tutto.
Veniamo al codice:
Per fare il logout uso questa funzione:
protected function logout($lc){
$_SESSION = array();
if (session_id() != '' || isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 2592000, '/');
}
session_unset(); //
session_destroy();
$this->showLoginPage($lc);
}
Ovviamente credo che senza la funzione per fare il login non mi sappiate dire dove sbaglio quindi vi inserisco un pò di codice e spero di farvi capire come funziona e se funziona quello che sto facendo; per prima cosa ovviamente questa funzione è usata solo dalla classe dove è contenuta o dalle figlie; seconda cosa che vi può essere utile , vi do un pò di codice:
Questa è la classe che sceglie che come "riempire" la pagina indice:
<?php
include_once basename(__DIR__).'/../Modello/CreatoreUtenti.php';
include_once basename(__DIR__).'/../Modello/Utente.php';
include_once basename(__DIR__).'/../Vista/LayoutCreator.php';
//classe di controllo che gestisce le parti in comune tra tutti
//i controlli e gestisce gli utenti non registrati
class SuperControl{
public function __construct() {
}
//questa funzione gestisce le pagine richieste dall'utente
public function requestGestor(&$request,&$session){
//creo il creatore di layout ( O_o)
$lc=new LayoutCreator();
//controllo se è stato ricevuto un comando
if(isset($request["cmd"])){
//se il comando ricevuto è "login" allora...
if($request["cmd"]=='login'){
if(isset($session["user"])){
$user=$session["user"];
//una volta controllato se la richiesta per l'utente è
////stata settata poso controllare se è un utente valido
if($user->isAUser())
$this->setHomeUtente($lc);
//in tutti gli altri casi mostro la pagina di login
else
$this->setLoginPage($lc);
}else {
$this->setLoginPage($lc);
}
}
else if($request["cmd"]=='login'){
$this->logout($lc);
}
else
$this->setLoginPage($lc);
}else {
if($this->logged())
$this->setHomeUtente($lc);
else
$this->setLoginPage($lc);
}
require basename(__DIR__) . '/../Vista/masterpage.php';
}
protected function setHomeUtente($lc) {
$user = $_SESSION['user'];
switch ($user->getRuolo()) {
case User::compratore:
$lc->setTitle("Benvenuto/a nella home compratore!");
$lc->setHeader(basename(__DIR__).'/../Vista/compratore/logo.php');
$lc->setCenter(basename(__DIR__).'/../Vista/compratore/quadroc.php');
$lc->setLeftBar(basename(__DIR__).'/../Vista/compratore/lside.php');
$lc->setFooter(basename(__DIR__).'/../Vista/compratore/ppagina.php');
break;
case User::commerciante:
$lc->setTitle("Benvenuto/a nella home commerciante!");
$lc->setHeader(basename(__DIR__).'/../Vista/commerciante/logo.php');
$lc->setCenter(basename(__DIR__).'/../Vista/commerciante/quadroc.php');
$lc->setLeftBar(basename(__DIR__).'/../Vista/commerciante/lside.php');
$lc->setFooter(basename(__DIR__).'/../Vista/commerciante/ppagina.php');
break;
case User::amministratore:
$lc->setTitle("Benvenuto/a nella home amministratore!");
$lc->setHeader(basename(__DIR__).'/../Vista/amministratore/logo.php');
$lc->setCenter(basename(__DIR__).'/../Vista/amministratore/quadroc.php');
$lc->setLeftBar(basename(__DIR__).'/../Vista/amministratore/lside.php');
$lc->setFooter(basename(__DIR__).'/../Vista/amministratore/ppagina.php');
break;
default :
$this->setLoginPage($lc);
}
}
public function setLoginPage(&$lc){
$lc->setTitle("Effettua il login! ");
$lc->setHeader(basename(__DIR__).'/../Vista/login/logo.php');
$lc->setCenter(basename(__DIR__).'/../Vista/login/quadroc.php');
$lc->setLeftBar(basename(__DIR__).'/../Vista/login/lside.php');
$lc->setFooter(basename(__DIR__).'/../Vista/login/ppagina.php');
}
//questa funzione controlla se l'utente è già loggato
protected function logged(){
if(isset($_SESSION["user"])){
$user=$_SESSION["user"];
if($user->isAUser())
return true;
else {
return false;
}
}else
return false;
}
protected function logout($lc){
$_SESSION = array();
if (session_id() != '' || isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 2592000, '/');
}
session_unset();
session_destroy();
$this->showLoginPage($lc);
}
}
?>
C'è una "masterpage" che viene esclusivamente riempita diciamo che è poco importante
spero vi basti come codice, altrimenti cerco di darvi tutto quello che vi serve
edit:forse vi serve anche come lo chiamo il logout:
<div class="logout">
<a href="indice.php?cmd=logout">Logout</a>
</div>