Установите переменную Session, используя JavaScript в PHP - PullRequest
36 голосов
/ 28 августа 2010

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

Ответы [ 9 ]

28 голосов
/ 23 октября 2012

В 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>
19 голосов
/ 28 августа 2010

Сеанс хранится на стороне сервера, поэтому вы не можете добавлять к нему значения из JavaScript.Все, что вы получаете на стороне клиента, это cookie-файл сеанса, который содержит идентификатор.Одна из возможностей - отправить AJAX-запрос на серверный скрипт, который установит переменную сеанса.Пример использования метода .post() в jQuery:

$.post('/setsessionvariable.php', { name: 'value' });

Разумеется, следует проявлять осторожность при раскрытии такого сценария.

8 голосов
/ 28 августа 2010

Если вы хотите разрешить манипулирование постоянными данными на стороне клиента, то лучше всего использовать куки.Для этого и были созданы файлы cookie.

3 голосов
/ 08 октября 2012

или просто с помощью js, см. Также в StackOverflow: Отправьте запрос JavaScript как отправка формы

НО ПОЧЕМУ попытайтесь установить $ _session с js?Любая переменная JS может быть изменена игроком с помощью некоторых сторонних инструментов (firebug), таким образом, любой игрок может изменить $ _session []!И PHP не может дать JS какие-либо секретные коды (или даже [зашифрованные]) для возврата, все это видно.Jquery или AJAX не могут помочь, в конце концов, все это просто js.

Это часто случается в дизайне онлайн-игр.(Может быть, немного теории игр? Прости меня, у меня есть мастера и я люблю применять теорию :)) Как и на сайте crimegameonline.com, я инициализирую мини-игру-головоломку с помощью PHP, сохраняя начальную доску в $ _SESSION ['foo'].Затем я использую php, чтобы [сделать html, который] показывает начальное начало головоломки.Затем js вступает во владение, наблюдая за кнопками и моддинговым элементом xy's, когда игроки делают ходы.Я не хочу играть клиент-сервер (например, WOW) и спрашивать сервер: «Эй, мой игрок хочет перейти на xy, что мне делать?».Это большая пропускная способность, я не хочу, чтобы сервер был вовлечен.

И я могу просто отправлять сообщения POST каждый раз, когда игрок делает ошибку (или умирает).Игрок может заблокировать исходящие POST (и изменить локальные JS-переменные, чтобы он забыл счетчик исходящих событий) или просто изменить исходящие POST-данные.ДА, люди будут делать это, особенно если речь идет о реальных деньгах.

Если игра небольшая, вы можете отправлять пост-обновления КАЖДЫЙ ход (нажатие кнопки), в одну сторону, с пост-вариами последних ДВУХ ходов,Затем, проверяет работоспособность сервера last и cat новые в $ _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).

1 голос
/ 12 ноября 2014

Один простой способ установить переменную сеанса - отправить запрос в другой файл 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');
1 голос
/ 28 августа 2010

Вы не можете напрямую манипулировать значением сеанса из Javascript - они существуют только на сервере.

Вы можете позволить вашему Javascript получать и устанавливать значения в сеансе, используя вызовы AJAX.

Смотри также

0 голосов
/ 16 января 2019

Я решил этот вопрос, используя 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;
    } 
?>
0 голосов
/ 25 мая 2016

будьте осторожны при этом, так как это угроза безопасности. Злоумышленники могут просто многократно вводить данные в переменные сеанса, то есть данные, хранящиеся на сервере. это открывает вас кому-то, перегружающему ваш сервер данными нежелательной сессии.

вот пример кода, который вы не хотели бы делать ..

<input type="hidden" value="..." name="putIntoSession">
..
<?php
$_SESSION["somekey"] = $_POST["putIntoSession"]
?>

Теперь злоумышленник может просто изменить значение putIntoSession и отправить форму миллиард раз. Boom!

Если для этого вы подходите к созданию службы AJAX, вам нужно убедиться, что вы применяете меры безопасности, чтобы повторные запросы не могли выполняться, что вы усекаете полученное значение и выполняете некоторые проверка основных данных.

0 голосов
/ 04 января 2011

Не возможно. Потому что JavaScript на стороне клиента, а сессия на стороне сервера. Чтобы сделать что-либо, связанное с сеансом PHP, вам нужно перейти на сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...