Установка PHP $ _SESSION ['var'] с помощью jQuery - PullRequest
32 голосов
/ 03 марта 2009

Мне нужно установить переменную PHP $ _SESSION с помощью jQuery. Если пользователь нажимает на изображение, я хочу сохранить часть информации, связанной с этим изображением, в качестве переменной сеанса в php.

Я думаю, что могу сделать это, вызвав страницу или функцию php и добавив эту информацию в строку запроса.

Любые идеи. Я нашел небольшую помощь через Google.

спасибо микрофон

Ответы [ 8 ]

74 голосов
/ 03 марта 2009

Вы не можете сделать это только через jQuery; вам понадобится комбинация Ajax (которую вы можете сделать с jQuery) и PHP-серверная часть. Очень простая версия может выглядеть так:

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'];
?>
7 голосов
/ 03 марта 2009

Возможно, вы захотите поместить функцию PHP на другую страницу PHP и использовать вызов AJAX для установки переменной.

5 голосов
/ 03 марта 2009

Многие ответы здесь касаются того, как, но не почему. Пары ключ / значение PHP $ _SESSION хранятся на сервере. Это отличается от куки, который хранится в браузере. Вот почему вы можете получить доступ к значениям в cookie как из PHP, так и из JavaScript. Что еще хуже, запросы AJAX от браузера не включают файлы cookie, которые вы установили для веб-сайта. Таким образом, вам нужно будет заставить JavaScript извлекать cookie-файл Session ID и включать его в каждый AJAX-запрос, чтобы сервер мог его использовать. С другой стороны, PHP-сессии предназначены для переключения на переменную HTTP GET или POST, если файлы cookie не отправляются вместе с заголовками HTTP. Я хотел бы рассмотреть некоторые принципы веб-приложений RESTful и использование шаблонов проектирования, которые являются общими для приложений такого типа, вместо того, чтобы пытаться манипулировать с помощью обработчика сеанса.

5 голосов
/ 03 марта 2009

То, что вы ищете, это jQuery Ajax . А затем просто настройте страницу php для обработки запроса.

3 голосов
/ 21 марта 2011

Я также сам разработал решение для "установки значения сеанса php" (аналогично решению Люка Денниса. Здесь нет ничего сложного), но после установки значения моего сеанса мои потребности "прыгнули в другой файл .php". Хорошо, я сделал это, внутри моего кода JQuery ... Но что-то не совсем работает ...

Моя проблема была довольно легкой:

-После того, как вы «$ .post» перешлите ваши значения в небольшой файл .php, вы должны дождаться некоторого возвращаемого значения «успех / неудача», и ТОЛЬКО ПОСЛЕ ЧТЕНИЯ ЭТОГО УСПЕХА, выполнить переход. Если вы просто сразу перейдете к следующему большому файлу .php, значение вашего сеанса, возможно, не будет установлено в механизм выполнения сеансов php, и вы, вероятно, будете читать «пусто» при выполнении $ _SESSION ["my_var"]; из целевого .php файла.

В моем случае, чтобы исправить эту ситуацию, я изменил свой код jQuery $ .post следующим образом:

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

Конечно, ваш файл "set_session_value.php" должен возвращать 'echo "0"; 'или' эхо "1"; '(или любые другие значения успеха, которые могут вам понадобиться).

Привет.

3 голосов
/ 23 марта 2010

in (backend.php) обязательно включите в себя

session_start ();

-Taylor http://www.hawkessolutions.com

1 голос
/ 05 мая 2014

Аналогично ответу Люка, но с GET.

Поместите этот php-код на php-страницу, напр. getpage.php:

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

Затем вызовите его с помощью скрипта jQuery, например:

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

Согласен с Федерико. В некоторых случаях вы можете столкнуться с проблемами при использовании POST, хотя не уверены, что это может быть связано с браузером.

0 голосов
/ 17 сентября 2015

Это работает в Firefox, если вы измените onClick () на click () в части 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});
});
...