Подтвердить что ты не робот

Установка PHP $_SESSION ['var'] с помощью jQuery

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 6

Я также разработал решение по настройке "php session set setter" (похожее на решение Luke Dennis). Но после установки значения сеанса мои потребности были "перескакивают на другой .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 "; 'или' echo" 1"; '(или любые значения успеха, которые могут вам понадобиться).

Привет.

Ответ 7

Подобно Luke, но с GET.

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

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

Затем вызовите его с помощью jQuery script следующим образом:

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

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

Ответ 8

Он работает на 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});
});