Problema sessioni...

Emix

Utente Attivo
15 Feb 2010
596
0
16
Salve a tutti,
ho una pagina con la quale gestisco delle carte fedeltà, i loro punti e l'operatore che sta lavorando...
Tutto parte dalla pagina di login:
PHP:
<?php
//creo la sessione
//in TUTTE le pagine in cui uso le sessioni
if(!isset($_SESSION)){
  session_start ();
  }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Benvenuti nel Gestionale</title>
<style type="text/css">
body { 
font: Eras Medium ITC;
text-align: center;
}
</style>

<style type="text/css">
#main {
	width:420px;
	height:300px;
	position:absolute;
	top:50%;
	left:50%;
	margin:-150px 0 0 -179px;
}
</style>
</head>

<body bgcolor="#f7b76b">
<div id="main" text align="left">
	<p><font size="4px" face="Eras Medium ITC">Effettua il Login per accedere al gestionale</font></p><br><br><br>
<form action="session_start.php" method="post">
<table style="">
<tr> 
<td height="41"><font size="4px" face="Eras Medium ITC">Inserisci Username: </font></td><td><input name="user" type="text" value="">
</td>
</tr>
<tr>
<td height="41"><font size="4px" face="Eras Medium ITC">Inserisci Password: </font></td><td>
  <input name="pwd" type="password" value="">
</td>
</tr>
</table>

<p align="center">
<input type=submit value="Login" name="B1" style="font-weight: 700"></font></td></tr></p>
</form>
</div> 
</body>
</html>

Da qui si arriva alla pagina session_start.php che gestisce la sessione e il controllo di user password e attivazione:
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, non ho messo la codifica dell'user e pass
    $query=mysql_query("SELECT * FROM utenti WHERE user='$user' and pwd='$pwd' and active='1'");
    //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);
	$utente=1;
        //e li passo in sessione
        $_SESSION['user']=$rows['user'];
        $_SESSION['pwd']=$rows['pwd'];
        //accedo alla/alle pag riservate
        @header('Location:ready.php');
    }else{
	$querynoactive=mysql_query("SELECT * FROM utenti WHERE user='$user' and pwd='$pwd' and active='0'");
    //verifico che esista un utente con tale username e tale password
    $esisteactive=mysql_num_rows($querynoactive);
    //se $esiste == 0 non cè
    if($esisteactive > 0){//esiste
        //estraggo usn e pass
        $rows=mysql_fetch_array($querynoactive);	
		echo "Devi attivare il tuo account tramite la mail che ti è stata inviata!";
		}
	//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.php');
	}else{
        unset($_SESSION);
	@header('location:error_pwd_user.php');
    }
}
}
}
?> 
<html>
<head>
<style type="text/css">
body { background-image: url(sfondo.jpg); 
background-repeat: repeat-x;
font: Eras Medium ITC;
}
</style>
</head>

<body bgcolor="#f7b76b">

</body>

Da qui si arriva alla pagina ready.php, non è altro che un disegno che dice che hai effettuato accesso e ti spedisce alla pagina ddt_go.php
PHP:
<?php
//creo la sessione
//in TUTTE le pagine in cui uso le sessioni
if(!isset($_SESSION)){
  session_start ();
  } else {
  session_start();

unset($_SESSION['barcode']);
session_destroy($_SESSION['barcode']);
session_write_close();
}
 include('connect.php');
?>
<!DOCTYPE html>
<html lang="it">
  <head>
    <meta charset="utf-8">
    <title>Creazione DdT</title>
            <style type="text/css">
        * { font-family:Arial; }
        h2 { padding:0 0 5px 5px; }
        h2 a { color: #224f99; }
        a { color:#999; text-decoration: none; }
        a:hover { color:#802727; }
        p { padding:0 0 5px 0; }

        input { padding:5px; border:1px solid #999; border-radius:4px; -moz-border-radius:4px; -web-kit-border-radius:4px; -khtml-border-radius:4px; }
        </style>
        <script type="text/javascript" src="ajax.js"></script>
	<script type="text/javascript">
	
	var ajax = new sack();
	var currentClientID=false;
	function getClientData()
	{
		var clientId = document.getElementById('clientID').value.replace(/[^0-9]/g,'');
		if(clientId.length==4 && clientId!=currentClientID){
			currentClientID = clientId
			ajax.requestFile = 'getClient.php?getClientId='+clientId;	// Specifying which file to get
			ajax.onCompletion = showClientData;	// Specify function that will be executed after file has been found
			ajax.runAJAX();		// Execute AJAX function			
		}
		
	}
	
	function showClientData()
	{
		var formObj = document.forms['clientForm'];	
		eval(ajax.response);
	}
	
	
	function initFormEvents()
	{
		document.getElementById('clientID').onblur = getClientData;
		document.getElementById('clientID').focus();
	}
	
	
	window.onload = initFormEvents;
	</script>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
        <script>
    $(function() {
      $("#aggiungi").click(function() {
        elem = $(".campo").first().clone();
        elem.css("display", "block");
        elem.appendTo("#campi");
      });

      $("#campi").on("click", ".remove", function() {
        $(this).parent().remove();
      });

      $("#aggiungi").click();
    });
    </script>
<style type="text/css">
body { background-image: url(sfondo.jpg); 
background-repeat: repeat-x;
font: Eras Medium ITC;
}
</style>

<style type="text/css">
#main {
	width:672px;
	height:600px;
	position:absolute;
	top:352px;
	left:523px;
	margin:-150px 0 0 -336px;
}
</style>
</head>
<body bgcolor="#f7b76b">
  <p align="center">
 <img src="images/logo.png" >
  <form action="read_ddt.php" method="post" name="read"> 
  <div id="main"> 
   Operatore: <font color="#FF0000"><?php echo $_SESSION[user]; ?></font><br>
   Data: <?php echo (date("d/m/Y"));?><br>
   Ora: <?php echo (date("H:i"));?><br>
   Barcode card:<font color="#FF0000"><?php echo $_SESSION[barcode]; ?></font><br><br>
   <input type="button" onClick="window.open('puntifidelity.htm', 'Cerca card', 'width=690, height=700, resizable, status, scrollbars=1, location');"
value="Cerca card">
   <p align="left"><a href="#" id="aggiungi">Aggiungi riga</a></p>

    <div id="campi">
    <p>
      <div class="campo" style="display: none;">
        <input type="text" placeholder="Barcode" name="campo[]" id="barcode">
        <input type="text" placeholder="Codice" name="codice[]" id="clientID">
        <input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione">
        <input type="text" placeholder="Quantità" name="quantita[]" id="quantita">
        <br><a href="#" class="remove">Rimuovi riga</a></br>
        </p>
      </div>
    </div>
    <p>
    <?php 
	$query=mysql_query("SELECT * FROM fidelitypoint WHERE barcode='$_SESSION[barcode]' ");
    //verifico che esista una una card con tale barcode 
    $esiste=mysql_num_rows($query);
    //se $esiste == 0 non cè
    if($esiste > 0){//esiste
        //estraggo usn e pass
        $rows=mysql_fetch_array($query);
		}
		$querypunti=mysql_query("Select sum(punti) from fidelitypoint where barcode='$_SESSION[barcode]'");
		$row=mysql_fetch_array($querypunti);
		?>
       Saldo punti:<font color="#FF0000"> <?php echo $row[0]; ?></font> <br><br>
       
<input name="read" type="submit" id="read" value="Inserisci"> 
</p>
</div>
</form> 
</p>
  </body>
</html>

Questa è la pagina principale... Da qui si vede l'operatore loggato passato in sessione, la data e l'ora, l'eventuale barcode della tessera, il pulsante per la ricerca tessera e il saldo dei punti... Funziona tutto alla grande... solamente che dal click del bottone "cercacard" si apre un popup che ti fa immettere codice, lo cerca e se lo trova, chiude il popup e aggiorna la pagina ddt_go con il numero del barcode passato in sessione... Anche questo TUTTO ok... solamente che ora mi rimane salvato FISSO il barcode dell'ultima tessera usata... Come posso fare?

La pagina cerca card è questa:

PHP:
<?php
session_start();
//CONNESSIONE AL DATABASE
include('connect.php');
//RECUPERA DATI DAL FORM
$mail = $_POST['mail'];
$mail = addslashes(htmlspecialchars(($_POST['mail'])));
$Barcode = $_POST['Barcode'];
$Barcode = addslashes(htmlspecialchars(($_POST['Barcode'])));
if($Barcode =="" ){
	
	
	if($mail==""){
		?>
    <script>
        alert('Il campo mail deve essere riempito!');
        location.href='puntifidelity.htm';
    </script>
    <?php
	}else{
	 if((!isset($_POST['mail'])) || (!eregi("^([a-z0-9\._-]+)(@[a-z0-9.-]+)(\.{1}[a-z]{2,4})$", $_POST['mail'])))
			{
            echo "Attenzione, formato email non valido.";
            //ritorno al form
            }else{
			$ctrl_mail = @mysql_query("SELECT * FROM fidelity            WHERE mail='$mail'") or die (mysql_error());
                   if(@mysql_num_rows($ctrl_mail)>0)
                   {
			       $_SESSION['mail'] = $mail;
				 ?>
    <script>
        location.href='fidelitypoint.php';
    </script>
    <?php
                   }else{
					   ?>
    <script>
        alert('Email non trovata');
        location.href='puntifidelity.htm';
    </script>
    <?php
				   }
	             }
		}
		}else{
			$ctrl_barcode = @mysql_query("SELECT * FROM fidelity WHERE barcode='$Barcode'") or die (mysql_error());
                if(@mysql_num_rows($ctrl_barcode)>0)
                {
			    $_SESSION['barcode'] = $Barcode;
				

	echo '<script>opener.location.href="ddt_go.php";self.close();</script>';

   
                }else{
					  ?>
    <script>
        alert('Numero tessera non trovato');
        location.href='puntifidelity.htm';
    </script>
    <?php
				   }
}
?>
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
il fatto è che se vado all'indirizzo diretto, oltretutto, mi apre normalmente la pagina, invece non dovrebbe....
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
il fatto è che se vado all'indirizzo diretto, oltretutto, mi apre normalmente la pagina, invece non dovrebbe....
ciao
se uno si logga vedo che passi in sessione
$_SESSION['user']=$rows['user'];
$_SESSION['pwd']=$rows['pwd'];
l'user e la passw, quindi nella/e pagina/e riservata/e
PHP:
<?php
session_start();
if(!isset($_SESSION['user']) || !isset($_SESSION['pwd'])){//verifichi che esistano entrambe
	//non esistono
	header("location:dove_vuoi.php");
	exit();
}
//eccetera.....

?>
due cose:
non usare il silent @: gli errori vanno eliminati non nascosti
dopo l'hedaer location metti exit()
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
ok ci avevo pensato hai perfettamente ragione... ora mi rimane il problema del barcode che viene replicato sempre l'ultimo...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
un'altra cosa, vedo che usi eregi.
la funzione eregi è deprecata e è molto facile che a brevissimo ti dia errore. devi usare perg:match o meglio la funzione
filter_var($email, FILTER_VALIDATE_EMAIL)
che da false se errata true se giusta
per il bar code non ho guardato, anche perchè non ho capito bene.
da quello che ho capito comunque se devi cambiare il barcode devi uppare la tabella
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
il barcode praticamente viene letto da una tabella e automaticamente viene passato in sessione alla pagina madre... io vorrei semplicemente che ogni volta che venga premuto "inserisci" o "cerca card" o semplicemente effettuato un login e logout si cancelli.... non ci riesco...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
per eliminare un dato in sessione ti basta usare unset
PHP:
unset($_SESSION['barcode']);
ogni volta che lo inserisci cancelli il dato in memoria
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
eh a se tu vedi bene c'è... è nelle prime righe...

PHP:
<?php
//creo la sessione
//in TUTTE le pagine in cui uso le sessioni
if(!isset($_SESSION)){
  session_start ();
  } else {
  session_start();

unset($_SESSION['barcode']);
session_destroy($_SESSION['barcode']);
session_write_close();
}
 include('connect.php');
?>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
non ho letto, stasera sono un po appannato
questo però ha poco senso
PHP:
if(!isset($_SESSION)){
  session_start ();
  } else {
  session_start();
senon è settata la inizializzi altrimenti la inizializzi lo stesso?

cmq hai provato a vedere con un var_dump se te l'ha eliminata?
PHP:
unset($_SESSION['barcode']); 
var_dump($_SESSION)
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
no uesto non l'ho fatto... e hai perfettamente ragione sul fatto che la reinizializzo due volte... tecnicamente a me serve sempre attiva la sessione urser e pwd e il loro controllo, con annesso resend alla pagina login... E la sessione del barcode che va aperta nel momento in cui si desidera inserire una card e va ELIMINATA nel momento in cui finisce la transazione (quindi coi tasti "inserisci" o "cerca card" o "azzera vendita"...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
i var_dump() sono utilissimini per capire dove e come risolvere i problemi
mettili prima e dopo eanche durante
quando trovi il problema lio togli
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
faccio una prova e ti posto risultato semmai... e vediamo... ma come faccio in modo che la sessione si distrugge con quei tasti?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
non mi sono letto il codice
ogni tasto avra una sua funzione
nel momento che la richiami inserisci l'unset e i var_dump()
su "inserisci" per esempio presumo che sia un tasto submit
PHP:
if(isset($_POST['inserisci'])) {
var_dump($_SESSION)  
     unset($_SESSION['barcode']); 
var_dump($_SESSION)
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
ok ora riesce distruggere la sessione barcode... ma ora però non mi passa il barcode in sessione mai... e quindi il barcode non lo vede mai... inoltre il saldo dei punti sembrerebbe rimanere sempre anche se la query del saldo punti viene fatta passando come parametro la sessione del barcode... Non c'è un altro modo per passare il barcode come dato solamente quando si clicca cerca card e la trova?
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
controllato commentando la parte dell'unset session barcode e funziona ma chiaramente non si resetta... il var dump sembra corretto :

Codice:
array(3) { ["user"]=> string(9) "Webmaster" ["pwd"]=> string(5) "prova" ["barcode"]=> string(13) "1234567890123" }

Dovrei fare in modo di creare una if che dice:
se non provengo da "link inserimento barcode" elimina la sessione barcode, altrimenti lasciala... Solamente che io non provengo direttamente dalla pagina di inserimento barcode ma bensi è un popup che apre, controlla barcode inserito, passa in sessione il barcode e autochiude il popup... è la medesima cosa?
A me praticamente interessa che la sessione barcode sia sempre senza nulla, ma venga riempita nel momento in cui faccio quei passaggi sopra...
Chiaramente devo effettuare un controllo anche nella query, dove prima di farla controllo se il barcode è in sessione altrimenti stampo a video "0"...
è fattibile una cosa del genere? non so dove mettere le mani...
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
ho risolto confrantando la stringa di sito da dove proviene.. ora sembra funzionare tutto.... grazie
 
Discussioni simili
Autore Titolo Forum Risposte Data
T PROBLEMA CON SESSIONI PHP 3
M Problema MySQL e sessioni MySQL 0
baobabdesign Problema scrittura sessioni PHP 0
L problema array con le sessioni PHP 1
R problema con le sessioni PHP 2
otto9due [risolto] Problema sessioni php e login PHP 5
asevenx problema con le sessioni PHP 6
S Problema con sessioni PHP 4
I Problema con le sessioni PHP 2
P Problema con l'uso delle sessioni... PHP 4
P Problema con sessioni e aggiornamento profilo PHP 21
redevilduil Php problema nelle sessioni PHP 6
P Problema con sessioni PHP 9
M problema con le sessioni e get PHP 6
A problema con le sessioni PHP 19
S Problema con le sessioni PHP 14
B problema sessioni PHP 0
F Rilanci di Eccezioni e Problema con le Sessioni PHP 1
E Problema con inserimenti di Link & sessioni PHP 6
P problema sessioni php [function.session-start] PHP 2
P PRoblema con le sessioni PHP 1
R problema sessioni(?) PHP 0
metalgemini Problema con sessioni PHP 1
I Sto progettando nuovi siti utilizzando bootstrap e devo dire funziona bene, l'unico problema e la maschera -moz- HTML e CSS 0
K Problema form update PHP 2
O problema con dvr dahua xvr5116 IP Cam e Videosorveglianza 0
S Problema nel ciclare un json Javascript 0
G Problema con Xampp Web Server 1
andrea barletta Problema con miniature comandi Photoshop 0
I problema con alice Posta Elettronica 0
K Problema Inner join PHP 1
F firefox problema http Linux e Software 0
N Problema con position absolute e overflow HTML e CSS 4
E Problema jquery Success jQuery 2
L Problema con inner join PHP 11
K [php] Problema con inner join PHP 4
E problema selezione sfumata Photoshop 2
K [PHP] Problema con variabili concatenate. PHP 1
A Problema filtro fluidifica Photoshop Photoshop 1
H Problema Bordi Scontorno Photoshop 1
O problema con query PHP 4
R Problema installazione Realtek WiFi USB rtl8821 Reti LAN e Wireless 0
I problema con 2 account Posta Elettronica 1
L problema collegamento file css con html HTML e CSS 1
Y Problema percorso file in rete PHP 1
N Problema SEO "L'URL non si trova su Google" SEO e Posizionamento 4
E Problema accesso a file con app sviluppata con MIT APP INVENTOR 2 Sviluppo app per Android 0
P Problema acquisizione clienti Webdesign e Grafica 1
F NetBeans problema creazione progetto Java Windows e Software 0
M Problema con Try Catch PHP 0

Discussioni simili