Sessione strana...

  • Creatore Discussione Creatore Discussione Emix
  • Data di inizio Data di inizio

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 ??
 
è 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');
    }
}
?>
 
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...
 
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?
 
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.
 
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');
}
?>
 
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:
@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.
 
Perdo la stazione. è questa la cosa strana. User e Password rimangono per tutta la durata. perdo solamente quella variabile li.
 
Ricapitola i passaggi che fai e quando inserisci i codici delle pagine metti anche il nome della pagina.
 
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