• User Newbie

    Gestione Sessioni

    Un cordiale saluto a tutti.
    Sono nuovo in questo forum, ma dico la verità ho sempre preso spunto da molte di queste discussioni relative alla programmazione php + mysql, sempre molto interessanti e dettagliate.

    Sto realizzando un ecommerce e mi sono imbattuto in un problema che proprio non riesco a superare.
    Tale problema riguarda la gestione delle sessioni per il carrello.

    Premesso che:
    in locale utilizzo Windows 7 + EasyPHP 5.3.3
    e in remoto (hosting Aruba) utilizzo la piattaforma LINUX

    Lo script per le sessioni che ho generato in locale funziona bene, non da nessun problema, invece in remoto appena aggiorno pagina mi sballa un pò tutto.

    Posto il codice di riferimento:

    pagina carrello.php (pagina che includo nell'header di tutte le pagine)

    
    <?php 
            //session_start(); è inserito in testa file config.php ad inizio codice, tale pagina è richiamata tramite include.
    	
    	require_once ('admin/_db.php');
    	
    	$cart_numprodotti = 0;
    	$cart_price = 0;	
    
    	if (isset($_SESSION['carrello'])){
    		$carrello = explode("|",$_SESSION['carrello']);
    		for ($i=1;$i<count($carrello);$i++){
    			$cart_prodotto = explode("#",$carrello*);
    			$cart_numprodotti = $cart_numprodotti + $cart_prodotto[1];
    			
    			$query = "SELECT * FROM prodotti WHERE p_codice='$cart_prodotto[0]'";
    			$ris = mysql_query($query) or die("Errore nella query: " . mysql_error());
    			
    			while($array = mysql_fetch_array($ris)){
    				$prodotto_prezzo=strval("$array[p_prezzo]");
    				$prodotto_sconto=("$array[p_sconto]");
    			}
    				
                if ($prodotto_sconto > 0) 
    				$temp = number_format($prodotto_prezzo - ($prodotto_prezzo*($prodotto_sconto/100)),2) * $cart_prodotto[1];
    			else $temp = $prodotto_prezzo * $cart_prodotto[1];
    			
    			$cart_price = $cart_price + $temp;
    		}
    	}
    ?>
    
    

    pagina _addcart.php

    
    <?php
    	session_start();
    	
    	$add = "|".$_POST['codice']."#".$_POST['quant'];
    	
    	if (isset($_SESSION['carrello'])){
    		$old = implode('|',$_SESSION['carrello']);
    		$_SESSION['carrello'] = $old.$add;
    	}
    	else
    		$_SESSION['carrello'] = $add;
    		
    	//var_dump($_SESSION['carrello']);
    	header('location:../dettaglio.php?codice='.$_POST['codice']);
    ?>
    
    

    in pratica aggiungo ad una variabile di sessione (carrello) una stringa composta da "|"codiceprodotto"#"quantitàprodotto

    Il problema nasce in REMOTO appena aggiorno qualsiasi pagina il contatore di numeroprodotti e prezzototale viene resettato a 0. :arrabbiato:

    La cosa che proprio non capisco, è perchè in locale va tutto liscio e in remoto no.

    Spero che qualcuno mi possa aiutare

    Grazie in anticipo 😉

    ps: scusate ho sbagliato sezione, non me ne sono accorto 😞


  • User

    Posso solo iniziare col dirti una cosa...

    verifica cosa stai passando.

    Controlla cosa ti trovi in mano alla fine di ogni processo (blocca l'esecuzione dello script od altera il finale per vedere cos'hai fatto)

    vedo che in _addcart.php tu richiedi di ripassarti i dati 'codice' tramite POST ($_POST['codice']) e quando però rigiri la pagina con l'header, reinoltri il dato come GET (header('location:../dettaglio.php?codice='.$_POST['codice']);)

    Ora... magari sbaglio io... ma non ti conviene passare ad usare una -forse meno sicura ma certamente più 'liberale' - $_REQUEST['codice'] che ritorna il dato qualsiasi sia la modalità con cui l'hai inviato? (Sia esso un GET od un POST)

    Un'altra cosa che mi lascia perplesso....

    questo commento: //session_start(); è inserito in testa file config.php ad inizio codice, tale pagina è richiamata tramite include.

    Ma sei sicuro? Per chiarirci... config.php viene richiamato davvero e correttamente? la pagina carrello.php non la richiami mai, diretto, vero? E' sempre INCLUSA o RICHIESTA da un'altra pagina, giusto?

    Per sicurezza, prova a cambiare l'include col request... vedi se ti esce con l'errore di non trovata....