- Home
- Categorie
- Coding e Sistemistica
- PHP
- Gestione Sessioni
-
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 LINUXLo 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.
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
-
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....