Sessione strana...

Emix

Utente Attivo
15 Feb 2010
596
0
16
Buongiorno non capisco il motivo per il quale passando tre valori in sessione, User Pwd Stazione, al login li prende ma se refresho tiene user e pwd ma non stazione... cosa lo può cambiare questo ? vi posto i tre link:

PHP:
    $query=mysql_query("SELECT * FROM utenti WHERE user='$user' and pwd='$pwd'");
    //verifico che esista un utente con tale username e tale password
    $esiste=mysql_num_rows($query);
    //se $esiste == 0 non cè
    if($esiste > 0){//esiste
        //estraggo usn e pass
        $rows=mysql_fetch_array($query);
        //e li passo in sessione
        $_SESSION['user']=$rows['user'];
        $_SESSION['pwd']=$rows['pwd'];
        $_SESSION['stazioneuser']=$rows['stazioneuser'];
        //accedo alla/alle pag riservate
        @header('Location:ready.php');

Dopo di che si arriva alla pagina ready che fa un redirect alla pagina dell'utente (è un immagine e stop)
E si atterra alla pagina Index_User.php questi i codici delle session le prime righe della pagina:

PHP:
 <?php
//creo la sessione
//in TUTTE le pagine in cui uso le sessioni
if(!isset($_SESSION)){
  session_start ();
  }
?>
<?php
//verifico l'esistenza delle sessioni
if((!isset($_SESSION['user'])) || !isset($_SESSION['pwd']) ){
    //le sessioni non esistono per cui riinvio al login (o alla pagina che voglio)
    @header('Location:login.php');
}
?>

Se aggiungo un if con isset stazione user, al login va bene se refhresho mi butta fuori perche la variabile si svuota.
Il primo login il var dump funziona e valorizza tutti e tre, se refresho la pagina stazione user diventa null il resto rimane valorizzato... Cosa sbaglio ??
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
è la stessa cosa che mi sto domandando io e ci sto diventando matto. Passo un campo in piu soltanto... Di seguito metto le pagine per intero:

Pagina Session Start
PHP:
<?php
//creo la sessione
//in TUTTE le pagine in cui uso le sessioni
if(!isset($_SESSION)){
  session_start ();
  }
?>
<?php
   //ho verificato che provengo da login
    //collegamento al db
   //verifiche sui post ....e li leggo
    $user = $_POST['user'];
    $user = addslashes(htmlspecialchars(($_POST['user'])));
    if($user==""){
    echo '<P> User Vuota</P>';
    header('Location:user_empty.php');
    //ritorno al form
    $a=1;
    }
    $pwd = $_POST['pwd'];
    $pwd = addslashes(htmlspecialchars(($_POST['pwd'])));
    if($pwd=="") {
    header('Location:pwd_empty.php');
    //ritorno al form
    $b=1;
    }
?>
<?php

include('connect.php');
//verifico di provenire da login.php e non digitando sul bw il nome della pagina
if(basename($_SERVER['HTTP_REFERER']) != 'login.php'){
    //non provengo da login.php
    unset($_SESSION);
    //distruggo eventuali sessioni e quindi rimando a login
    @header('Location:login.php');
} else { 
    if ($a!=1 && $b!=1){
    //interrogo il db
    $query=mysql_query("SELECT * FROM utenti WHERE user='$user' and pwd='$pwd'");
    //verifico che esista un utente con tale username e tale password
    $esiste=mysql_num_rows($query);
    //se $esiste == 0 non cè
    if($esiste > 0){//esiste
        //estraggo usn e pass
        $rows=mysql_fetch_array($query);
        //e li passo in sessione
        $_SESSION['user']=$rows['user'];
        $_SESSION['pwd']=$rows['pwd'];
        $_SESSION['stazioneuser']=$rows['stazioneuser'];
        //accedo alla/alle pag riservate
        @header('Location:ready.php');
    } else {
    //non esiste
    // controlla che siano di un amministratore
    $queryadmin = mysql_query("SELECT * FROM admin WHERE user='$user' AND pwd='$pwd'");
    $esisteadmin=mysql_num_rows($queryadmin);
    //se $esiste == 0 non cè
    if($esisteadmin > 0){//esiste
        //estraggo usn e pass
        $rows=mysql_fetch_array($queryadmin);
       $admin=1;
        //e li passo in sessione
        $_SESSION['user']=$rows['user'];
        $_SESSION['pwd']=$rows['pwd'];
        //accedo alla/alle pag riservate
        @header('Location:ready_admin.php');
    }
    } 
    } // if a e b
    else {
        unset($_SESSION);
    @header('location:error_pwd_user.php');
    }
}
?>
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
si.. anche perche l'alternativa e spaccare il monitor hahaha si il primo è la pagina di login (chiaramente non quella che passa user e pwd in html) il secondo è la index...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
intanto alcune cose
PHP:
<?php
//.....
if($user==""){//vale anche per if($pwd==""
    echo '<P> User Vuota</P>';//attento è un output html l'ehader da errore
    header('Location:user_empty.php');//nel $pwd=="" non avendo messo l'outut header va, ma
    //ritorno al form
    $a=1;//non sarà mai uno perche prima esce dalla pagina
    }
//.......
?>
correggi
PHP:
<?php
//.....
$user = $_POST['user'];
//....
$a=0;//è meglio valorizzarle prima per poi se entra nell'if dargli il valore 1
$b=0;
//....
if($user==""){
    $a=1;
    header('Location:user_empty.php');
    }
//.......
?>
poi la parte di script sopra e nella stessa pagina delle parte di script dove hai
PHP:
<?php
//....
if ($a!=1 && $b!=1){
//....
?>
perche se non lo è come fa ha sapere quale è il valore risulterebbero NULL
ultima per ora, metti un var_dump, non vorrei che stessimo giranda attorno a un problema, ma il problema è un altro
PHP:
<?php
//...
if($esiste > 0){//esiste
        //estraggo usn e pass
        $rows=mysql_fetch_array($query);
        //e li passo in sessione
        $_SESSION['user']=$rows['user'];
        $_SESSION['pwd']=$rows['pwd'];
        var_dump($rows['stazioneuser']);//e guarda cosa ti riporta
        $_SESSION['stazioneuser']=$rows['stazioneuser'];
        //accedo alla/alle pag riservate
        header('Location:ready.php');
    } else {
//......
?>
p.s.
non mettere i silent @ gli errori vanno eliminati non nascosti
dimenticavo: visto come si fa a spezzare il monitor?
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
Ho fatto tutto ciò che mi hai detto e il var dump restituisce il valore corretto :

string(7) "Daimler"

Ma se continuo e cambio pagina la sessione perde la stazione.
 

Ibernato

Utente Attivo
2 Giu 2016
70
6
8
28
Secondo me l'errore sta qui
PHP:
<?php
//creo la sessione
//in TUTTE le pagine in cui uso le sessioni
if(!isset($_SESSION)){
 session_start ();
 }
?>
<?php
//verifico l'esistenza delle sessioni
if((!isset($_SESSION['user'])) || !isset($_SESSION['pwd']) ){
 //le sessioni non esistono per cui riinvio al login (o alla pagina che voglio)
 @header('Location:login.php');
}
?>

Cambia così

PHP:
<?php
session_start();
//creo la sessione
//in TUTTE le pagine in cui uso le sessioni
if(!isset($_SESSION)){
 @header('Location:login.php'); 
}
?>
<?php
//verifico l'esistenza delle sessioni
if((!isset($_SESSION['user'])) || !isset($_SESSION['pwd']) ){
 //le sessioni non esistono per cui riinvio al login (o alla pagina che voglio)
 @header('Location:login.php');
}
?>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
ci deve essere un errore di logica nello script, sono i più difficili a trovare in quanto un noto principio di programmazione cita "un programma non fa quello che pensi che faccia, ma quello che gli dici di fare"
detto questo cospargi lo script di var_dump relativi alla sessione, metti il primo seguendo il flusso dello script verifichi se la sessione esiste, poi il secondo ecc.. sino a che scopri dove la sessione sparisce, se riesci ad individuare dove sparisce a quel punto devi cominciare a vedere il perchè.
con carta e matita fatti un diagramma di flusso indicando nei vari rami il valore che dovrebbero avere le varie variabili (non solo la sessione)

dimenticavo
@Ibernato se l'errore fosse quello non vedrebbe nemmeno le altre sessioni
 
Ultima modifica:

Ibernato

Utente Attivo
2 Giu 2016
70
6
8
28
@borgo italia si ma session_start() si mette prima di usare le variabili Session per questo ho consigliato di metterlo all'inizio e non nell'if. Ma io non ho capito, perdi la sessione di user e psw e stazione? Perchè tu hai postato solo lo script in cui controlli che esiste la sessione dell'user e hai scritto che ti rimanda alla login.
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
Perdo la stazione. è questa la cosa strana. User e Password rimangono per tutta la durata. perdo solamente quella variabile li.
 

Ibernato

Utente Attivo
2 Giu 2016
70
6
8
28
Ricapitola i passaggi che fai e quando inserisci i codici delle pagine metti anche il nome della pagina.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
dai retta a @Ibernato , anzi forse ti conviene ripertire
poi una cosa vedo che usi due tabelle una per gli iscritti e una per gli admin, forse ti converrebbe farne una sola mettendo un campo es. chiamato permessi con 0 user normali, 1 moderatori, 3 admin eviti di sprecare risorse.
 
Discussioni simili
Autore Titolo Forum Risposte Data
L Sessione e array per utenti PHP 0
N Variabile di sessione è un array PHP7 PHP 3
R probema con la sessione PHP 0
S Utilizzo variabili di sessione tra PC e server PHP 0
M [PHP] Passare variabile di sessione con metodo GET PHP 10
R SESSIONE PERSISTENTE Programmazione 0
L [PHP] Suggerimento su sessione PHP 6
Cosina [PHP] Chiudere sessione quando la pagina viene riaggiornata PHP 4
cattivic72 [PHP] Durata sessione PHP 1
N [PHP] Utilizzo variabili di sessione [Risolto] PHP 13
I [PHP] login con sessione singola PHP 1
otto9due [PHP] id di sessione "session_id()" a cosa serve e come utilizzarlo? PHP 4
K [PHP] Unica sessione login forum/sito PHP 1
L [PHP] Sessione tra sottodominio PHP 1
M [PHP] Sessione Login PHP 15
gandalf1959 [PHP] variabile di sessione si azzera ricaricando la pagina? PHP 3
P dati da tenere in sessione PHP 2
M durata sessione php PHP 1
L Sessione php PHP 6
G Uso variabili di sessione PHP 4
N warning su sessione PHP 2
Emix Problema sessione PHP 6
M Problemi col settare variabile di sessione PHP 3
S sessione di login che non dura nullaaa Supporto Mr.Webmaster 0
otto9due Eeliminare tabella db a sessione scaduta.. Possibile? PHP 0
L eliminare un prodotto dal carrello tramite l'id della sessione PHP 1
T Passare dati (ID di sessione) tra le varie activity di un app android Sviluppo app per Android 1
O Mantenere una sessione PHP 20
E file di sessione non si aggiornano PHP 5
A estrarre il ciclo while in una sessione e spedire l'array in un db PHP 2
D Sessione PHP 11
P Problema con id di sessione PHP 4
L Query con sessione PHP 3
asevenx mantenere sessione login attiva anche in altre pagine PHP 8
Y mantenere sessione login? PHP 5
L problema variabile per creare sessione PHP 5
A Variabile di sessione perde il valore PHP 2
C cancellare un elemento in un array memorizzato in una sessione PHP 12
C E' possibile salvare array tramite sessione o cookie? PHP 5
darkjoker Sessione di bug hunting Sicurezza e Virus 1
M $_SESSION['sessione'][1] possibile? Sessioni con indice. PHP 8
Monital Distruggere una sessione all'interruzione dello script PHP 4
I Sessione scaduta PHP 6
zighy php sessione per singolo utente PHP 7
Eliox Accesso diretto ai valori di sessione PHP 10
V Recuperare Username di una Sessione PHP 3
L controllo sessione e pagina logout PHP 2
Q sessione autenticazione PHP 3
minatore Sessione nella check PHP 13
U passare una variabile di sessione da pagina di joomla a pagina php Joomla 3

Discussioni simili