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

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

Можно ли установить переменные сеанса PHP с помощью Javascript?

4b9b3361

Ответ 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;
    } 
?>