2011-01-31 40 views
10

Tengo el siguiente problema ... que desee establecer una variable de sesión al hacer clic en un enlace normal como:Cómo establecer una variable de sesión al hacer clic en un enlace <a>

<a href="home" name="home">home</a> 

Mi investigación parece indicar que no es posible que PHP se ponga al día con el evento click de tal manera que establezca una variable de sesión.

Creo que es posible con Ajax, pero ¿cómo? ¿Y cómo se vería mi enlace?
Configuración de la variable de sesión debe ser similar:

$_SESSION['link'] = home; 

Así que en resumen: Al hacer clic en un enlace en HTML, se debe establecer una variable de sesión.
¿CÓMO voy a hacer eso?

PD: No estoy muy familiarizado con Ajax, pero me pondré al día.

EDITAR: Los enlaces se referirán a la misma página, también quiero evitar las URL como "home.php? Link = X".
Si no es posible hacerlo de otra manera, lástima. Pero espero que haya una solución.
Importante: el nombre del enlace será el valor de $_SESSION['link']

+0

Así que estoy confundido, lo que sucede después de hacer clic en el enlace ? ¿Genera la sesión, luego devuelve la identificación de la sesión y la usa en el enlace, o simplemente hace una llamada antes de ejecutar el enlace? ¿Parece que estás forzando la fuerza bruta atrapando un tiempo de espera de sesión y usando una redirección para iniciar sesión? –

+0

Aquí está el escenario: Estoy en home.php, voy a hacer clic en un enlace que va a home.php. Quiero ver el evento click y convertir el nombre de mi enlace en el valor de mi variable de sesión. Pero dado que el enlace está en HTML, es del lado del cliente y no del lado del servidor. – Mixxiphoid

+0

HTML hará que la página vuelva a cargar, ¿no es así? Entonces, puedes capturarlo con PHP de la manera en que @Brandon lo está describiendo. – SuperSpy

Respuesta

10
session_start(); 
    if(isset($_SESSION['current'])){ 
     $_SESSION['oldlink']=$_SESSION['current']; 
    }else{ 
     $_SESSION['oldlink']='no previous page'; 
    } 
    $_SESSION['current']=$_SERVER['PHP_SELF']; 

Tal vez esto es lo que está buscando? Recordará el enlace/página anterior del que proviene (dentro de su sitio web).

Coloque esa pieza en la parte superior de cada página.

Si usted quiere hacer es actualizar la prueba 'puede agregar otro cheque:

if(isset($_SESSION['current']) && $_SESSION['current']!=$_SERVER['PHP_SELF']) 

Esto hará que la página no recuerda a sí mismo.

ACTUALIZACIÓN: casi lo mismo que @Brandon aunque ... Sólo tiene que utilizar una variable php, sé que esto parece un riesgo para la seguridad, pero cuando se hace correctamente no lo es.

<a href="home.php?a=register">Register Now!</a> 

PHP:

if(isset($_GET['a']) /*you can validate the link here*/){ 
    $_SESSION['link']=$_GET['a']; 
} 

Por qué incluso almacenar el GET en una sesión? Solo úsalo. Por favor, dime por qué no quieres usar GET. «Validar para más seguridad. Tal vez pueda ayudarte con un mejor guión.

+0

El problema es que los enlaces se referirán a la página en la que se encuentran. Por lo tanto, $ _SESSION ['current'] siempre será home.php. Necesito el nombre del enlace para hacer que mi sesión sea variable. Gracias por el código, aunque :). – Mixxiphoid

+0

Necesito que se llame desde la base de datos en función de la variable, y con eso también el nombre del enlace. Debido a la actualización de la página, al hacer clic en un enlace, la variable debe ser una var. $ _SESSION. – Mixxiphoid

+0

Quiero evitar GET porque no quiero estropear mi url y debido a algunos problemas de seguridad. Tal vez pueda desarmar el GET después de usarlo y luego actualizar la página otra vez ... También pensé que esto sería posible con Ajax, pero no he escuchado eso en las respuestas hasta ahora ... – Mixxiphoid

2

Es el enlace a otra página web? De ser así, quizás podría colocar la variable en la cadena de consulta y establecer la variable de sesión cuando se cargue la página a la que se está vinculando.

Así que el enlace tiene el siguiente aspecto:

<a href="home.php?variable=value" name="home">home</a> 

Y la página homge sería analizar la cadena de consulta y establecer la variable de sesión.

+0

Gracias por su respuesta, pero se refiere a la misma página. Haré mi publicación más clara. – Mixxiphoid

4

En HTML:

<a href="index.php?link=home" name="home">home</a> 

Luego, en PHP:

if(isset($_GET['link'])){$_SESSION['link'] = $_GET['link'];} 
+0

No rechazaré este, pero diré que no lo recomiendo. Si bien funciona en código inocuo, todo lo que toque una base de datos debe ser escapado correctamente, ya que el cliente puede enviar lo que quiera a través de este método. – Jason

10

Tuve el mismo problema: quería pasar un parámetro a otra página haciendo clic en un hipervínculo y obtener el valor para ir a la página siguiente (sin usar GET porque el parámetro está almacenado en la URL).

para aquellos que no entienden por qué querrías hacer esto, la respuesta es que no quieres que el usuario vea información sensible o si no quieres que alguien edite el GET.

después de buscar en Internet parecía que no era posible hacer un hipervínculo normal utilizando el método POST.

Y luego tuve un momento eureka !!!! ¿por qué no usar CSS para que el botón de enviar se vea como un hipervínculo normal? ... y poner el valor que quiero pasar en un campo oculto

lo probé y funciona. se puede ver una exaple aquí http://paulyouthed.com/test/css-button-that-looks-like-hyperlink.php

el código básico para la forma es:

<form enctype="multipart/form-data" action="page-to-pass-to.php" method="post"> 
         <input type="hidden" name="post-variable-name" value="value-you-want-pass"/> 
         <input type="submit" name="whatever" value="text-to-display" id="hyperlink-style-button"/> 
       </form> 

el css básica es:

#hyperlink-style-button{ 
     background:none; 
     border:0; 
     color:#666; 
     text-decoration:underline; 
    } 

    #hyperlink-style-button:hover{ 
     background:none; 
     border:0; 
     color:#666; 
     text-decoration:none; 
     cursor:pointer; 
     cursor:hand; 
    } 
+2

¿No quieres que una de esas declaraciones CSS sea '# hyperlink-style-button: hover {...}'? –

+0

Vaya, copié incorrectamente mi CSS en la publicación. Bien descrito –

Cuestiones relacionadas