2009-03-03 15 views
31

Necesito establecer una variable PHP $ _SESSION usando jQuery. SI el usuario hace clic en una imagen, quiero guardar una información asociada con esa imagen como una variable de sesión en php.

Creo que puedo hacer esto llamando a una página o función php y agregando esa información a la cadena de consulta.

Cualquier idea. He encontrado poca ayuda a través de google.

gracias micrófono

Respuesta

68

No puede hacerlo a través de jQuery solo; necesitarás una combinación de Ajax (que puedes hacer con jQuery) y un back-end de PHP. Una versión muy simple podría tener este aspecto:

HTML:

<img class="foo" src="img.jpg" /> 
<img class="foo" src="img2.jpg" /> 
<img class="foo" src="img3.jpg" /> 

Javascript:

$("img.foo").onclick(function() 
{ 
    // Get the src of the image 
    var src = $(this).attr("src"); 

    // Send Ajax request to backend.php, with src set as "img" in the POST data 
    $.post("/backend.php", {"img": src}); 
}); 

PHP (backend.php):

<?php 
    // do any authentication first, then add POST variable to session 
    $_SESSION['imgsrc'] = $_POST['img']; 
?> 
+18

Missing session_start(); en back-end que no sea eso, ¡este es un gran consejo! Gracias Luke ... – Codex73

7

podría querer intentar poner la función de PHP en otra página PHP, y el uso de una llamada AJAX para establecer la variable.

5

Lo que usted está buscando es jQuery Ajax. Y luego simplemente configure una página php para procesar la solicitud.

5

Muchas de las respuestas aquí abordan cómo pero no el por qué. PHP $ _SESSION pares clave/valor se almacenan en el servidor. Esto difiere de una cookie, que se almacena en el navegador. Es por eso que puede acceder a valores en una cookie desde PHP y JavaScript. Para empeorar las cosas, las solicitudes AJAX del navegador no incluyen ninguna de las cookies que ha configurado para el sitio web. Por lo tanto, deberá hacer que JavaScript extraiga la cookie de ID de sesión e incluirla en todas las solicitudes de AJAX para que el servidor pueda verlas o no. En el lado positivo, las Sesiones PHP están diseñadas para conmutar por error a una variable HTTP GET o POST si las cookies no se envían junto con los encabezados HTTP. Me gustaría ver algunos de los principios de las aplicaciones web RESTful y el uso de los patrones de diseño que son comunes con ese tipo de aplicaciones en lugar de tratar de manipular con el controlador de sesión.

3

También diseñó una solución "php sesión de valor colocador" por mí mismo (similar a la solución de Lucas Dennis'. No es gran cosa aquí), pero después de ajustar el valor de mi sesión, mis necesidades eran " saltando sobre otro archivo .php ". Ok, lo hice, dentro de mi código de jQuery ... Pero algo no funcionaba bien ...

Mi problema era una especie de fácil:

-Después de "$ .post" sus valores en el pequeño archivo .php, debe esperar algún valor de retorno "éxito/fracaso", y SÓLO DESPUÉS DE LEER ESTE VALOR DE ÉXITO, realice el salto. Si inmediatamente saltas al siguiente grandephp, es posible que el valor de la sesión no se haya establecido en el motor de tiempo de ejecución de las sesiones de php, y probablemente leerá "vacío" al hacer $ _SESSION ["my_var"]; desde el archivo .php de destino.

En mi caso, para corregir esa situación, he cambiado de jQuery $ .post código de esta manera:

$.post('set_session_value.php', { key: 'keyname', value: 'myvalue'}, function(ret){ 
    if(ret==0){ 
     window.alert("success!"); 
     location.replace("next_page.php"); 
    } 
    else{ 
     window.alert("error!"); 
    } 
}); 

Por supuesto, el archivo "set_session_value.php", debería devolver 'eco "0"; 'o' eco '1' '; '(o los valores de éxito que pueda necesitar).

Saludos.

1

Similar a la respuesta de Luke, pero con GET.

Coloque este código php en una página php, ej. getpage.php:

<?php 
$_SESSION['size'] = $_GET['size']; 
?> 

Entonces llaman con un script jQuery así:

$.get("/getpage.php?size=1"); 

De acuerdo con Federico. En algunos casos, puede tener problemas al utilizar POST, aunque no está seguro si puede estar relacionado con el navegador.

0

Funciona en firefox, si cambia onClick() a hacer clic() en la parte de javascript.

$("img.foo").click(function() 
 
{ 
 
    // Get the src of the image 
 
    var src = $(this).attr("src"); 
 

 
    // Send Ajax request to backend.php, with src set as "img" in the POST data 
 
    $.post("/backend.php", {"img": src}); 
 
});

Cuestiones relacionadas