2010-08-28 14 views

Respuesta

23

En JavaScript:

jQuery('#div_session_write').load('session_write.php?session_name=new_value'); 

En session_write.php archivo:

<? 
session_start(); 

if (isset($_GET['session_name'])) {$_SESSION['session_name'] = $_GET['session_name'];} 
?> 

En HTML:

<div id='div_session_write'> </div> 
+20

Esto puede suponer un riesgo para la seguridad si las personas utilizan las variables de sesión esperando que solo puedan establecerse en el servidor. –

17

La sesión se almacena en el servidor, por lo que no puede agregarle valores desde JavaScript. Todo lo que obtienes del lado del cliente es la cookie de sesión que contiene una identificación. Una posibilidad sería enviar una solicitud AJAX a un script del lado del servidor que establecería la variable de la sesión. Ejemplo con el método de jQuery .post():

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

Usted debe, por supuesto, tener cuidado de no exponer tales guión.

6

Si desea permitir la manipulación del lado del cliente de los datos persistentes, entonces lo mejor es simplemente utilizar cookies. Para eso fueron diseñadas las cookies.

+0

pero presentan limitaciones @lese majestad.así que estoy buscando llevar mi matriz de javascript de una página a otra página – saikiran

0

No es posible. Porque JavaScript es del lado del cliente y la sesión es del lado del servidor. Para hacer algo relacionado con una sesión PHP, debe dirigirse al servidor.

3

o de JS puro, ver también en StackOverflow: JavaScript post request like a form submit

PERO ¿Por qué tratar de establecer $ _SESSION con js? cualquier variable JS puede ser modificada por un jugador con algunas herramientas de terceros (firebug), ¡así cualquier jugador puede modificar $ _session []! Y PHP no puede dar a js ningún código secreto (o incluso [encriptado] encriptado) para devolver, todo está visible. Jquery o AJAX no pueden ayudar, es todo js al final.

Esto sucede en el diseño de juegos en línea mucho. (Tal vez un poco de Game Theory? Perdóneme, tengo una maestría y amo poner la teoría en práctica :)) Como en crimegameonline.com, I inicializa un rompecabezas de minijuego con PHP, guardando la tabla inicial en $ _SESSION ['foo ']. Luego, uso php para [make html that] muestra el inicio del rompecabezas inicial. Luego, js asume el control, observa los botones y el elemento de modificación xy a medida que los jugadores realizan movimientos. NO QUIERO jugar cliente-servidor (como WOW) y preguntar al servidor 'oye, mi jugador quiere pasar a xy, ¿qué debo hacer?'. Es mucho ancho de banda, no quiero el servidor involucrado.

Y puedo enviar mensajes POST cada vez que el jugador comete un error (o muere). El jugador puede bloquear los POST salientes (y alterar los vars local JS para que olvide el recuento de salientes) o simplemente modificar los datos POST salientes. SÍ, la gente hará esto, especialmente si se trata de dinero real.

Si el juego es pequeño, puede enviar actualizaciones de publicaciones CADA movimiento (clic de botón), unidireccional, con los vars de los últimos dos movimientos. Luego, la cordura del servidor verifica la última y la nueva en $ _SESSION ['allMoves']. Si el juego es masivo, puedes enviar una actualización a la mitad de todos los movimientos anteriores y ver si coincide en la lista de la actualización final.

Entonces, después de un js piensa que tenemos una victoria, añadir o mod un botón para cambiar de página:

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

Luego de la nueva página PHP mira a $ _SESSION [ 'init'] y juega a través de cada una de el $ _SESSION ['allMoves'] para ver si realmente es un ganador. El servidor (PHP) debe decidir si realmente es un ganador, no el cliente (js).

+0

ps: es probable que use AJAX para (obtener o publicar) enviar movimientos individuales, sin ir a la página de acción, a una página .php de acción que los atrape en una sesión var (sin información de texto/encabezado). – dako

1

un enlace Si La forma más simple de establecer la variable de sesión es enviando la solicitud a otro archivo PHP. Aquí no es necesario usar Jquery ni ninguna otra biblioteca.

Considere tengo archivo index.php donde estoy creando SESSION variable (por ejemplo $_SESSION['v']=0) si SESSION no se crea lo contrario voy a cargar otro archivo.

Código es la siguiente:

session_start(); 
if(!isset($_SESSION['v'])) 
{ 
    $_SESSION['v']=0; 
} 
else 
{ 
    header("Location:connect.php"); 
} 

Ahora en count.html Quiero establecer esta variable de sesión a 1.

contenido en count.html

function doneHandler(result) { 
    window.location="setSession.php"; 
} 

En count.html parte de javascript, envíe una solicitud t o otro archivo PHP (digamos setSession.php) donde puedo tener acceso a la variable de sesión.

Así que en setSession.php in se escriben

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

tener cuidado al hacer esto, ya que es un riesgo para la seguridad. los atacantes podrían simplemente inyectar datos en variables de sesión, que son datos almacenados en el servidor. esto lo abre a alguien que sobrecarga su servidor con datos de sesión basura.

He aquí un ejemplo de código que usted no quiere hacer ..

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

Ahora un atacante puede simplemente cambiar el valor de putIntoSession y enviar el formulario de mil millones de veces. ¡Auge!

Si se toma el camino de crear un servicio AJAX para hacer esto, querrá asegurarse de aplicar la seguridad para asegurarse de que no se puedan realizar solicitudes repetidas, de que esté truncando el valor recibido y haciendo alguna validación de datos básicos.

Cuestiones relacionadas