Intereting Posts

Установить переменную сеанса с помощью javascript в PHP

Можно ли установить переменные сеанса 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.

Смотрите также

  • Переменные Javascript и сессии
  • Событие jQuery click для изменения переменной сеанса php

Один простой способ установить переменную сеанса – отправить запрос другому файлу 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 для этого, вы должны убедиться, что вы обеспечиваете безопасность, чтобы убедиться, что повторные запросы не могут быть сделаны, что вы обрезаете полученное значение и выполните некоторую базовую проверку данных ,