Мне нужно установить переменную PHP $ _SESSION, используя jQuery. Если пользователь нажимает на изображение, я хочу сохранить часть информации, связанную с этим изображением, в качестве переменной сеанса в php.
Я думаю, что могу сделать это, вызвав php-страницу или функцию и добавив эту часть информации в строку запроса.
Есть идеи. Я нашел небольшую помощь через Google.
спасибо микрофон
Вы не можете сделать это через 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']; ?>
Можете попробовать поставить функцию PHP на другую страницу PHP и использовать вызов AJAX для установки переменной.
Что вы ищете, это jQuery Ajax . А затем просто настройте страницу php для обработки запроса.
Многие ответы здесь касаются того, как, но не почему. Пара ключей / значений PHP $ _SESSION хранится на сервере. Это отличается от файла cookie, который хранится в браузере. Вот почему вы можете получать доступ к значениям в cookie как из PHP, так и из JavaScript. Хуже того, AJAX-запросы из браузера не включают файлы cookie, которые вы установили для веб-сайта. Таким образом, вам нужно будет заставить JavaScript вытащить файл cookie Session ID и включить его в каждый запрос AJAX для того, чтобы сервер мог создавать головы или хвосты. С яркой стороны сессии PHP предназначены для перехода на HTTP GET или POST-переменную, если файлы cookie не отправляются вместе с заголовками HTTP. Я бы рассмотрел некоторые из принципов веб-приложений RESTful и использование шаблонов проектирования, которые являются общими для таких приложений, вместо того, чтобы пытаться манипулировать обработчиком сеанса.
Я также разработал решение для установки «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"; '(или любые значения успеха, которые могут вам понадобиться).
Приветствую.
Как и ответ Луки, но с GET.
Поместите этот php-код на php-страницу, например. getpage.php:
<?php $_SESSION['size'] = $_GET['size']; ?>
Затем вызовите его с помощью сценария jQuery следующим образом:
$.get( "/getpage.php?size=1");
Согласитесь с Федерико. В некоторых случаях вы можете столкнуться с проблемами с помощью POST, хотя не уверены, может ли он быть связан с браузером.
Он работает на 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}); });