web-dev-qa-db-de.com

Einstellen a PHP $ _SESSION ['var'] mit jQuery

Ich muss eine PHP $ _SESSION-Variable mit der jQuery festlegen. WENN der Benutzer auf ein Bild klickt, möchte ich eine mit diesem Bild verknüpfte Information als Sitzungsvariable in PHP speichern.

Ich denke, ich kann dies tun, indem ich eine PHP-Seite oder -Funktion aufrufe und diese Info an die Abfragezeichenfolge anhange. 

Irgendwelche Ideen. Ich habe wenig Hilfe durch Google gefunden.

danke mike

32
mmundiff

Sie können dies nicht allein mit jQuery tun. Sie benötigen eine Kombination aus Ajax (die Sie mit jQuery verwenden können) und einem PHP - Backend. Eine sehr einfache Version könnte so aussehen:

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

Vielleicht möchten Sie versuchen, die Funktion PHP auf einer anderen Seite PHP zu platzieren, und die Variable mit einem AJAX - Aufruf festlegen.

7
Bryan A

Viele Antworten beziehen sich auf das Wie, aber nicht das Warum . PHP $ _SESSION-Schlüssel/Wert-Paare werden auf dem Server gespeichert. Dies unterscheidet sich von einem Cookie, das im Browser gespeichert wird. Aus diesem Grund können Sie sowohl in PHP als auch in JavaScript auf Werte in einem Cookie zugreifen. .__ Um das Ganze noch schlimmer zu machen, enthalten die Anforderungen von AJAX des Browsers keine der Cookies, die Sie für die Website gesetzt haben. Sie müssen also JavaScript dazu bringen, das Session ID-Cookie abzurufen und in jede AJAX -Anforderung einzufügen, damit der Server Kopf oder Zahl daraus machen kann. Auf der positiven Seite sind PHP -Sitzungen so konzipiert, dass ein Failover auf eine HTTP-GET- oder POST -Variable durchgeführt wird, wenn Cookies nicht zusammen mit den HTTP-Headern gesendet werden .. __ von RESTful-Webanwendungen und Verwendung der Entwurfsmuster, die für diese Art von Anwendungen üblich sind, anstatt zu versuchen, den Session-Handler zu manipulieren.

5
Nolte

Was Sie suchen, ist jQuery Ajax . Und dann einfach eine PHP-Seite einrichten, um die Anfrage zu bearbeiten.

5
Hawk Kroeger

Ich habe auch eine "php session value setter" -Lösung selbst entworfen (ähnlich der Lösung von Luke Dennis. Keine große Sache hier), aber nachdem ich meinen Sitzungswert eingestellt hatte, sprangen meine Bedürfnisse auf "eine andere .php-Datei". Ok, ich habe es in meinem Code geschrieben ... Aber etwas hat nicht funktioniert ...

Mein Problem war irgendwie einfach:

Nachdem Sie Ihre Werte in die kleine .php-Datei geschrieben haben, sollten Sie auf den Rückgabewert "Erfolg/Misserfolg" warten. Führen Sie den Sprung NUR NACH DEM LESEN DES ERFOLGSWERTES aus. Wenn Sie direkt auf die nächste große .php-Datei springen, wurde Ihr Sitzungswert möglicherweise nicht für die Laufzeit-Engine von PHP-Sitzungen festgelegt, und Sie werden wahrscheinlich "empty" lesen, wenn Sie $ _SESSION ["my_var"] ausführen. von der Zieldatei .php.

In meinem Fall habe ich zur Korrektur dieser Situation meinen jQuery $ .post-Code folgendermaßen geändert:

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

Natürlich sollte Ihre Datei "set_session_value.php" 'echo "0" zurückgeben. 'oder' Echo "1"; '(oder welche Erfolgswerte Sie auch benötigen).

Schöne Grüße.

3
Isaac

in (backend.php) müssen Sie Include einschließen 

session_start ();

-Taylor http://www.hawkessolutions.com

3
antioch1st

Ähnlich wie Lukas Antwort, aber mit GET.

Fügen Sie diesen PHP-Code in eine PHP-Seite ein, z. getpage.php:

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

Dann rufen Sie es mit einem jQuery-Skript wie folgt auf:

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

Stimmen Sie Federico zu. In einigen Fällen können Probleme beim POST auftreten, Sie sind sich jedoch nicht sicher, ob es sich um einen Browser handelt.

1
Waltur Buerk

Es funktioniert auf Firefox, wenn Sie onClick () ändern, um im Javascript-Teil auf () zu klicken.

$("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