2009-03-03 8 views
31

Ho bisogno di impostare una variabile $ _SESSION PHP usando jQuery. SE l'utente fa clic su un'immagine, voglio salvare un'informazione associata a quell'immagine come variabile di sessione in php.

Penso di poterlo fare chiamando una pagina php o una funzione e aggiungendo quella porzione di informazioni alla stringa della query.

Qualsiasi idea. Ho trovato un piccolo aiuto tramite Google.

grazie Mike

risposta

68

Non puoi farlo solo con jQuery; avrai bisogno di una combinazione di Ajax (che puoi fare con jQuery) e un back-end PHP. Una versione molto semplice potrebbe assomigliare a questo:

HTML:

<img class="foo" src="img.jpg" /> 
<img class="foo" src="img2.jpg" /> 
<img class="foo" src="img3.jpg" /> 

Javascript:

$("img.foo").onclick(function() 
{ 
    // Get the src of the image 
    var src = $(this).attr("src"); 

    // Send Ajax request to backend.php, with src set as "img" in the POST data 
    $.post("/backend.php", {"img": src}); 
}); 

PHP (backend.php):

<?php 
    // do any authentication first, then add POST variable to session 
    $_SESSION['imgsrc'] = $_POST['img']; 
?> 
+18

session_start Missing(); su backend diverso da quello, questo è un ottimo consiglio! Grazie Luca ... – Codex73

7

potrebbe desiderare di provare a mettere la funzione PHP in un'altra pagina PHP, e utilizzare una chiamata AJAX per impostare la variabile.

5

Quello che stai cercando è jQuery Ajax. E poi basta configurare una pagina php per elaborare la richiesta.

5

Un sacco di risposte qui stanno affrontando il come ma non il perché. Le coppie chiave/valore PHP $ _SESSION sono memorizzate sul server. Questo differisce da un cookie, che è memorizzato nel browser. Ecco perché sei in grado di accedere ai valori di un cookie da PHP e JavaScript. Per peggiorare le cose, le richieste AJAX dal browser non includono alcun cookie che hai impostato per il sito web. Quindi, dovrai fare in modo che JavaScript prelevi il cookie dell'ID di sessione e lo includa in ogni richiesta AJAX affinché il server possa fare testa o croce. Sul lato positivo, le Sessioni PHP sono progettate per il failover su una variabile HTTP GET o POST se i cookie non vengono inviati insieme alle intestazioni HTTP. Vorrei esaminare alcuni dei principi delle applicazioni web RESTful e l'uso dei modelli di progettazione che sono comuni con questi tipi di applicazioni invece di provare a manipolare con il gestore di sessione.

3

Ho anche progettato una soluzione "php session valore setter" di me stesso (simile alla soluzione di Luca Dennis'. Nessun grosso problema qui), ma dopo aver impostato il mio valore di sessione, i miei bisogni erano " saltando su un altro file .php ". Ok, l'ho fatto, dentro il mio codice jQuery ... Ma qualcosa non ha funzionato del tutto ...

Il mio problema era una specie di facile:

-Dopo si "$ .post" i valori sul piccolo file .php, dovresti attendere qualche valore di ritorno "success/failure", e SOLO DOPO AVER LETTO QUESTO VALORE DI SUCCESSO, esegui il salto. Se salti immediatamente sul prossimo grande.php, il tuo valore di sessione potrebbe non essere stato impostato sul motore di runtime delle sessioni php, e probabilmente leggerà "vuoto" quando fai $ _SESSION ["my_var"]; dal file .php di destinazione.

Nel mio caso, per correggere questa situazione, ho cambiato il mio jQuery $ codice .post questo modo:

$.post('set_session_value.php', { key: 'keyname', value: 'myvalue'}, function(ret){ 
    if(ret==0){ 
     window.alert("success!"); 
     location.replace("next_page.php"); 
    } 
    else{ 
     window.alert("error!"); 
    } 
}); 

Naturalmente, il file "set_session_value.php", dovrebbe tornare 'echo "0"; 'or' echo "1"; '(o qualsiasi valore di successo che potrebbe essere necessario).

Saluti.

1

Simile alla risposta di Luke, ma con GET.

Inserire questo codice php in una pagina php, ad es. getpage.php:

<?php 
$_SESSION['size'] = $_GET['size']; 
?> 

quindi chiamare con uno script jQuery come questo:

$.get("/getpage.php?size=1"); 

D'accordo con Federico. In alcuni casi è possibile che si verifichino problemi con l'uso di POST, anche se non si è sicuri che possa essere correlato al browser.

0

Funziona su firefox, se si modifica onClick() per fare clic su() nella parte javascript.

$("img.foo").click(function() 
 
{ 
 
    // Get the src of the image 
 
    var src = $(this).attr("src"); 
 

 
    // Send Ajax request to backend.php, with src set as "img" in the POST data 
 
    $.post("/backend.php", {"img": src}); 
 
});