2010-08-28 2 views

ответ

23

В 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> 
+20

Это может быть угрозой безопасности, если люди используют переменные сеанса, ожидая, что они могут быть установлены только на стороне сервера. –

17

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

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

Вы должны, конечно, быть осторожным разоблачение такого сценария.

1

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

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

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

6

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

+0

но они приходят с ограничениями @lese majeste.поэтому я ищу, чтобы взять мой массив javascript с одной страницы на другую страницу – saikiran

0

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

3

или чисто JS см также на StackOverflow: JavaScript post request like a form submit

НО ПОЧЕМУ попытаться установить $ _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-данные. ДА, люди это сделают, особенно если речь идет о реальных деньгах.

Если игра небольшая, вы можете отправлять обновления сообщений. КАЖДЫЙ ход (нажатие кнопки), односторонний, с пост-варами последних двух ходов. Затем проверка работоспособности сервера продолжается, а новые кошки - в $ _SESSION ['allMoves']. Если игра массивная, вы можете просто отправить «половинное» обновление всех предшествующих ходов и посмотреть, совпадает ли она в списке последнего обновления.

Затем, после того, как JS думает, что мы имеем выигрыш, или добавить мод кнопку, чтобы изменить страницы:

document.getElementById('but1').onclick=Function("leave()"); 
... 
function leave() { 
    var line='crimegameonline-p9b.php'; 
    top.location.href=line; 
} 

Затем PHP новая страница выглядит в $ _SESSION [ «инициализации»] и играет через каждый из $ _SESSION ['allMoves'], чтобы убедиться, что это действительно победитель. Сервер (PHP) должен решить, действительно ли это победитель, а не клиент (js).

+0

ps: можно было бы использовать AJAX для (получать или публиковать) отправлять отдельные ходы, не переходя на страницу действия, на страницу действия .php, которая кошки их в session var (нет информации о тексте/заголовке). – dako

1

Один си mple способ установить переменную сеанса - отправить запрос другому файлу 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 part, send request t o другой файл PHP (скажем setSession.php), где я могу получить доступ к переменной сеанса.

Так setSession.php в напишут

session_start(); 
$_SESSION['v']=1; 
header('Location:index.php'); 
0

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

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

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

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

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

Смежные вопросы