2010-09-27 5 views
0

Il y a un problème avec les variables de session dans mon application Web. J'ai plusieurs types de documents, lorsque l'utilisateur veut l'éditer, il appuie sur un bouton et php record nombre de document à $ _SESSION ['brevet_number'] via la méthode GET. Tout va bien lors du lancement de l'application. Je l'ai testé avec 2 documents avec 2 numéros différents. Au début tout fonctionne bien, mais alors il semble que la variable de session ne soit pas changée et je vois le document avec un autre nombre.Bogue de variable de session php

Lorsque cliquez sur le bouton « Modifier » utilisateur, il envoie un numéro de document à patent_load.php, et il est toujours le chargement correct:

var patent_number=$(this).val(); 
$('#user_input_text').load('pages/patent/patent_load.php?section=patent_claims&patent_number='+patent_number); 

Mais quand je clique à la section du document à partir du menu, il apparaît vieux numéro de session:

$('#user_input_text').load('pages/patent/patent_load.php?section=patent_claims'); 

Voici une patent_load.php:

session_start(); 
session_regenerate_id(); 

if (isset($_SESSION['id'])){ 

    $db=new mysqli('X','X','X','X');  
    $db->set_charset("utf8"); 

    $section=$_GET['section']; 
    if(isset($_GET['patent_number'])){ 
     $number=$_GET['patent_number']; 
     $_SESSION['patent_number']=$number; 
     echo 'get is set'; 
    } 
    $patent_number=$_SESSION['patent_number']; 

     $query="select $section from new_patent_document where patent_number='$patent_number'"; 
     $result=$db->query($query); 
     $row=$result->fetch_assoc(); 
     echo $patent_number.', '; 
     echo $row[$section]; 

Tous idées comment puis-je le résoudre et pourquoi la variable de session n'est pas mise à jour. Merci d'avance.

+0

Votre code est très vulnérable à l'injection SQL! Jetez un oeil à PHPs [PDO] (http://php.net/pdo) et ses déclarations préparées. – jwueller

+0

@elusive Merci pour votre commentaire. Quand je résous ce problème, je vais mettre en œuvre des déclarations préparées – dsplatonov

+0

Que voulez-vous dire par, "il semble vieux numéro de session". Est-ce que ça se règle une fois et plus jamais? Toujours afficher le précédent pour corriger id? Et faites-vous référence au numéro de brevet du numéro de SESSION actuel? –

Répondre

2

Vérifiez si le navigateur met en cache les requêtes que vous effectuez via GET. Je ne sais pas comment votre application est conçue, mais si vous utilisez le bouton "retour" du navigateur (ou via javascript), vous rencontrerez cette situation.

+0

C'est un bon point. Quand j'ai eu un problème similaire dans le passé, j'ai fini par ajouter un élément aléatoire à la chaîne de requête pour m'assurer qu'il ne déclenche pas de caches. Une méthode un peu grossière, mais qui fonctionnait quand j'avais besoin d'une solution rapide et facile. – Spudley

+0

vous pouvez utiliser POST au lieu de GET si vous ne voulez pas ajouter de valeur aléatoire à la requête ... mais en utilisant des valeurs aléatoires est le chemin à parcourir aussi loin que je sais. – Quamis

0

êtes-vous sûr que le numéro de brevet est un nombre réel? avez-vous essayé

$ query = "sélectionnez $ section de new_patent_document où patent_number = '$ patent_number'";

die (requête $);

+0

Oui, voici la sortie: select patent_claims from new_patent_document où patent_number = '5' – dsplatonov