Можно ли установить переменные сеанса PHP с помощью Javascript?
В JavaScript:
jQuery('#div_session_write').load('session_write.php?session_name=new_value');
В файле session_write.php:
<? session_start(); if (isset($_GET['session_name'])) {$_SESSION['session_name'] = $_GET['session_name'];} ?>
В HTML:
<div id='div_session_write'> </div>
Сеанс хранится на стороне сервера, поэтому вы не можете добавлять к нему значения из JavaScript. Все, что вы получаете на стороне клиента, – это cookie сеанса, который содержит идентификатор. Одна из возможностей – отправить запрос AJAX на серверный скрипт, который установит переменную сеанса. Пример с помощью метода .post()
jQuery:
$.post('/setsessionvariable.php', { name: 'value' });
Конечно, вы должны быть осторожны в том, чтобы разоблачить такой скрипт.
Если вы хотите разрешить манипуляции с постоянными данными на стороне клиента, лучше всего использовать файлы cookie. Для этого были разработаны файлы cookie.
или чистыми js, см. также в StackOverflow: запрос на отправку JavaScript, например, форму отправить
НО ПОЧЕМУ пытаться установить $ _session с js? любая переменная JS может быть изменена игроком с помощью некоторых сторонних инструментов (firebug), поэтому любой игрок может модифицировать $ _session []! И PHP не может дать js какие-либо секретные коды (или даже [перекатывать] зашифрованные), чтобы вернуться, все это видно. JQuery или AJAX не могут помочь, это все js в конце.
Это происходит в онлайн-дизайне игры. (Может быть, немного теории игр?) Прости меня, у меня есть мастера и я люблю использовать теорию :)) Как и в crimegameonline.com, я инициализирую загадку мини-игр с помощью PHP, сохраняя начальную доску в $ _SESSION ['foo' ]. Затем я использую php для [make html, который] показывает начальный запуск головоломки. Затем js берет верх, наблюдая за кнопками и элементом mody xy, когда игроки делают ходы. Я НЕ хочу играть на клиент-сервере (например, WOW) и спрашивать сервер «эй, мой игрок хочет переместиться на xy, что мне делать?». Это большая пропускная способность, мне не нужен сервер.
И я могу просто отправлять POST каждый раз, когда игрок делает ошибку (или умирает). Игрок может блокировать исходящие POST (и изменять локальные JS-вары, чтобы заставить его забыть счетчик) или просто изменять исходящие POST-данные. ДА, люди это сделают, особенно если речь идет о реальных деньгах.
Если игра небольшая, вы можете отправлять обновления сообщений. КАЖДЫЙ ход (нажатие кнопки), односторонний, с post vars последних двух шагов. Затем проверка работоспособности сервера продолжается, а новые кошки – в $ _SESSION ['allMoves']. Если игра массивная, вы можете просто отправить «половинное» обновление всех предшествующих ходов и посмотреть, совпадает ли она в списке последнего обновления.
Затем, после того, как js думает, что у нас есть победа, добавьте или измените кнопку для изменения страниц:
document.getElementById('but1').onclick=Function("leave()"); ... function leave() { var line='crimegameonline-p9b.php'; top.location.href=line; }
Затем PHP новой страницы смотрит на $ _SESSION ['init'] и играет через каждую из $ _SESSION ['allMoves'], чтобы увидеть, действительно ли это победитель. Сервер (PHP) должен решить, действительно ли это победитель, а не клиент (js).
Вы не можете напрямую манипулировать значением сеанса из Javascript – они существуют только на сервере.
Вы могли бы позволить вашему Javascript получать и устанавливать значения в сеансе с помощью вызовов AJAX.
Смотрите также
Один простой способ установить переменную сеанса – отправить запрос другому файлу PHP. Здесь нет необходимости использовать JQuery или любую другую библиотеку.
У меня есть файл index.php, где я создаю переменную SESSION
(скажем $_SESSION['v']=0
), если SESSION
не создается иначе я загружу другой файл.
Код выглядит так:
session_start(); if(!isset($_SESSION['v'])) { $_SESSION['v']=0; } else { header("Location:connect.php"); }
Теперь в count.html я хочу установить для этой переменной сеанса значение 1.
Содержимое в count.html
function doneHandler(result) { window.location="setSession.php"; }
В части count.html javascript отправьте запрос в другой файл PHP (скажем, setSession.php
), где я могу получить доступ к переменной сеанса.
Так что в setSession.php внутри будет писать
session_start(); $_SESSION['v']=1; header('Location:index.php');
Невозможно. Поскольку JavaScript является клиентской, а сеанс – серверным. Чтобы сделать что-либо, связанное с сеансом PHP, вам нужно перейти на сервер.
будьте осторожны при этом, так как это риск для безопасности. злоумышленники могут просто повторно вводить данные в переменные сеанса, которые хранятся на сервере. это откроет вам кого-то, перегружающего ваш сервер данными нежелательной сессии.
вот пример кода, который вы не хотели бы делать.
<input type="hidden" value="..." name="putIntoSession"> .. <?php $_SESSION["somekey"] = $_POST["putIntoSession"] ?>
Теперь злоумышленник может просто изменить значение putIntoSession и отправить форму в миллиард раз. Boom!
Если вы примете подход к созданию службы AJAX для этого, вы должны убедиться, что вы обеспечиваете безопасность, чтобы убедиться, что повторные запросы не могут быть сделаны, что вы обрезаете полученное значение и выполните некоторую базовую проверку данных ,