Можно ли установить переменные сеанса PHP с помощью Javascript?
Установить переменную сеанса с помощью javascript в PHP
Ответ 1
В 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>
Ответ 2
Сессия хранится на стороне сервера, поэтому вы не можете добавлять к ней значения из JavaScript. Все, что вы получаете на стороне клиента, - это cookie сеанса, который содержит идентификатор. Одна из возможностей - отправить запрос AJAX серверной стороне script, которая установит переменную сеанса. Пример с jQuery .post()
метод:
$.post('/setsessionvariable.php', { name: 'value' });
Вы должны, конечно, быть осторожными в том, чтобы разоблачить такой script.
Ответ 3
Если вы хотите разрешить манипуляции с постоянными данными на стороне клиента, лучше всего использовать файлы cookie. То, для чего были созданы куки.
Ответ 4
или чистыми 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).
Ответ 5
Вы не можете напрямую манипулировать значением сеанса из Javascript - они существуют только на сервере.
Вы можете позволить вашему Javascript получать и устанавливать значения в сеансе с помощью вызовов AJAX, хотя.
См. также
Ответ 6
Один простой способ установить переменную сеанса - отправить запрос в другой файл 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');
Ответ 7
Невозможно. Поскольку JavaScript является клиентской, а сеанс - серверным. Чтобы сделать что-либо, связанное с сеансом PHP, вам нужно перейти на сервер.
Ответ 8
будьте осторожны при этом, так как это риск безопасности. злоумышленники могут просто повторно вводить данные в переменные сеанса, которые хранятся на сервере. это откроет вам кого-то, перегружающего ваш сервер с помощью данных мусорного сеанса.
вот пример кода, который вы бы не хотели делать.
<input type="hidden" value="..." name="putIntoSession">
..
<?php
$_SESSION["somekey"] = $_POST["putIntoSession"]
?>
Теперь злоумышленник может просто изменить значение putIntoSession и отправить форму в миллиард раз. Boom!
Если вы применяете подход к созданию службы AJAX для этого, вы должны убедиться, что вы обеспечиваете безопасность, чтобы убедиться, что повторные запросы не могут быть сделаны, что вы обрезаете полученное значение и выполняете некоторые Базовая проверка данных.
Ответ 9
Я решил этот вопрос с помощью Ajax. Я делаю ajax-вызов на страницу PHP, где передаваемое значение будет сохранено в сеансе.
Пример, который я собираюсь показать вам, - это то, что, когда вы меняете значение количества элементов, отображаемых в таблице данных, это значение сохраняется в сеансе.
$('#table-campus').on( 'length.dt', function ( e, settings, len ) {
$.ajax ({
data: {"numElems": len},
url: '../../Utiles/GuardarNumElems.php',
type: 'post'
});
});
И GuardarNumElems.php выглядит следующим образом:
<?php
session_start();
if(isset ($_POST['numElems'] )){
$numElems = $_POST['numElems'];
$_SESSION['elems_table'] = $numElems;
}else{
$_SESSION['elems_table'] = 25;
}
?>