web-dev-qa-db-fra.com

Définir un PHP $ _SESSION ['var'] en utilisant jQuery

Je dois définir une variable PHP $ _SESSION à l'aide de jQuery. SI l'utilisateur clique sur une image, je souhaite enregistrer une information associée à cette image en tant que variable de session en php.

Je pense que je peux le faire en appelant une page ou une fonction php et en ajoutant cette information à la chaîne de requête. 

Des idées. J'ai trouvé peu d'aide grâce à Google.

merci mike

32
mmundiff

Vous ne pouvez pas le faire uniquement par jQuery; vous aurez besoin d'une combinaison d'Ajax (que vous pouvez faire avec jQuery) et d'un back-end PHP. Une version très simple pourrait ressembler à ceci:

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'];
?>
72
Luke Dennis

Essayez de placer la fonction PHP sur une autre page PHP et utilisez un appel AJAX pour définir la variable.

7
Bryan A

Beaucoup de réponses ici concernent le comment mais pas le pourquoi . Les paires clé/valeur PHP $ _SESSION sont stockées sur le serveur. Cela diffère d'un cookie, qui est stocké sur le navigateur. C'est pourquoi vous pouvez accéder aux valeurs d'un cookie à partir de PHP et de JavaScript. Pour aggraver les choses, les requêtes de AJAX du navigateur n'incluent aucun des cookies que vous avez définis pour le site Web. Donc, vous devrez faire en sorte que JavaScript récupère le cookie de l'identifiant de session et l'inclue dans chaque requête AJAX afin que le serveur puisse en faire la tête ou la queue. Du côté positif, les sessions PHP sont conçues pour basculer vers une variable HTTP GET ou POST si les cookies ne sont pas envoyés avec les en-têtes HTTP . J'examinerais certains des principes d’applications Web RESTful et l’utilisation des modèles de conception communs à ce type d’applications au lieu d’essayer de manipuler avec le gestionnaire de session.

5
Nolte

Ce que vous cherchez est jQuery Ajax . Et puis il suffit de configurer une page php pour traiter la demande.

5
Hawk Kroeger

J'ai également conçu moi-même une solution de "définition de la valeur de session php" (semblable à la solution de Luke Dennis. Ce n'est pas grave ici), mais après avoir défini la valeur de ma session, mes besoins étaient de "sauter sur un autre fichier .php". Ok, je l'ai fait, à l'intérieur de mon code JQuery ... Mais quelque chose n'a pas tout à fait fonctionné ...

Mon problème était assez facile:

-Après avoir "$ .post" vos valeurs sur le petit fichier .php, vous devez attendre une valeur de retour "succès/échec", et UNIQUEMENT APRÈS AVOIR LU CETTE VALEUR DE SUCCÈS, effectuez le saut. Si vous sautez immédiatement sur le prochain gros fichier .php, la valeur de votre session n’aura peut-être pas été définie sur le moteur d’exécution des sessions php, et vous lirez probablement "vide" en faisant $ _SESSION ["my_var"]; à partir du fichier .php de destination.

Dans mon cas, pour corriger cette situation, j’ai modifié mon code jQuery $ .post de la façon suivante:

$.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!");
    }
});

Bien entendu, votre fichier "set_session_value.php" devrait renvoyer 'echo "0"; 'ou' echo "1"; '(ou quelles que soient les valeurs de succès dont vous pourriez avoir besoin).

Salutations.

3
Isaac

dans (backend.php) assurez-vous d'inclure include 

session_start ();

-Taylor http://www.hawkessolutions.com

3
antioch1st

Semblable à la réponse de Luke, mais avec GET.

Placez ce code php dans une page php, ex. getpage.php:

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

Puis appelez-le avec un script jQuery comme ceci:

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

D'accord avec Federico. Dans certains cas, vous pouvez rencontrer des problèmes d’utilisation de POST, sans savoir si cela peut être lié au navigateur.

1
Waltur Buerk

Cela fonctionne sur firefox, si vous changez onClick () pour cliquer sur () dans la partie 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});
});

0
Petko Doichev