Hacer que enlace funcione solo cuando se viene de una pagina en especifico

Iniciado por Alarkon_88, 17 Agosto 2018, 21:19 PM

0 Miembros y 2 Visitantes están viendo este tema.

Alarkon_88

Hola, quería saber si es posible que solo se muestre el contenido de una pagina web siempre y cuando venga desde un enlace por ejemplo

mipagina.com/paso1.php   a  ►   mipagina.com/paso2.php

y de esta forma si la persona intenta entrar a mipagina.com/paso2.php directo con la URL no le sea permitido bien sea que no se vea nada o mostrando un mensaje de error

engel lex

hay 2 formas

1- variable de sesión:
guarda siempre en la variable de sesión la url solicitada, así en paso2 puedes verificar si la ultima pagina fue paso1

ventaja: no se puede alterar
desventaja: si el usuario tiene 2 pestañas de tu pagina abierta (por ejemplo está viendo la pagina de "noticias") y entra a otro link despues de pagina1, el metodo fallaría, requerirías varias estructuras de control para evitar esto (nada del otro mundo, pero es más codigo)

2- referer header
leyendo la cabecera de referido, puedes saber desde que pagina se está referenciando a otra

ventaja: es facil seguir el rastro del usuario aunque tenga multiples pagina abiertas
desventaja: como es un método de lado de cliente puede ser alterado intencionalmente (no es fácil para un principiante, pero alguien con mediana capacidad podría hacerlo)


recomendación... ve por la opción 1, y asegurate de que no haya "confusiones" en el valor guardado... si no es esencial un control estricto a prueba de hackeos en este sistema (ya que por lo menos hay inputs que no podrían estar en blanco)  usa el metodo 2 ya que es más simple
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Alarkon_88

#2
Muchas gracias, logre conseguir este codigo el cual deberia funcionar de esta forma


Tengo paso1.php y paso2.php, el codigo lo coloco en la pagina paso2.php

muy bien el codigo detecta cuando ingreso directamente por url y me redigire a la pagina de error asignada el problema que tengo con este codigo es que funciona si entro desde cualquier pagina siempre y cuando sea por un enlace por decir paso5523.php contiene un enlace a paso2.php y igual sigue entrando cuando deberia mostrar el mensaje de error ya que la unica entrada solo deberia ser por paso1.php, quisiera que funcionara igual pero que solo mostrara la web y el mensaje de bienvenida solo cuando se venga de una pagina en especifico en este caso paso1.php


Código (php) [Seleccionar]


 <?php
 
$ref 
$_SERVER['HTTP_REFERER'];
if(isset(
$ref[0])) {
    
$protocol strtolower(parse_url($ref)['scheme']) === 'https' 'https':'http';
    echo (
strtolower($ref) === $protocol 'paso1.php') ? 'welcome':'BIENVENIDO';  
} else {
    echo(
"<script>window.location = 'error.php';</script>");
}
 
     
?>




engel lex

por dios! XD pero por qué el desastre de codigo?

Código (php) [Seleccionar]
if(isset($_SERVER['HTTP_REFERER'])) {
 $pagina = end(explode("/", $_SERVER['HTTP_REFERER'])); // separa por / y retorna el ultimo elemento
 if($pagina == 'paso1.php'){
   echo "viene de pagina1";
 }else{
   echo "error";
 }
}


igual revisa el codigo, no lo probé
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Alarkon_88

#4
jeje fue un codigo que consegui por ahi, ya probe el que me acabas de pasar y funciona bien solo hasta donde deberia mandar el error, por ejemplo si accedo directamente desde la URL me muestra la pagina normal cuando deberia salir error pero si entro desde paso1.php me muestra el mensaje de bienvenida

engel lex

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Alarkon_88

No lo he podido arreglar, el problema es que cuando ingreso por url no me manda el error de resto funciona bien por ejemplo colocó el código  en paso2.php y ingreso por url y me muestra la pagina normal como hago para que en este caso mande error al igual que como si entrase desde otra página que no sea paso1.php gracias


Amigo por ejemplo si yo coloco que solo se permita entrada desde paso1.php como haria en el caso de que el enlace tenga variables ejemplo paso1.php?nombre=carlos&apellido=medina

como haria para que solo detectase el paso1.php y permitiera el acceso sin leer o omitiendo las variables


Hola he modificado un poco el codigo

su funcion es permitir solo entrada desde paso1.php, el problema es que si entro desde http://localhost/referer/paso1.php me da el mensaje de bienvenida pero si entro desde http://localhost/referer/paso1.php?nombre=carlos&apellido=medina me manda el mensaje de error "Solo se puede acceder por paso1.php"

Código (php) [Seleccionar]

<?php
    $referer 
= isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
    if(
$referer !== 'http://localhost/referer/paso1.php'){
            echo 
"Solo se puede acceder por paso1.php";
            die();
        }else{
            echo 
"Entro desde paso1.php";
        }
    
?>





No hagas doble post, usa el boton modificar

engel lex

solo ignora del ? en adelante... o usa post (no veo la necesidad del get)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Alarkon_88

#8
Si, lo que pasa es que para la pagina donde lo estoy haciendo se envian variables por GET

pero el problema como te dije es que necesito que entre a paso2.php bien sea que entre desde paso1.php o paso1.php?nombre=carlos&apellido=medina

Si entro desde  paso1.php si entra normal y me da el mensaje de bienvenida
el problema esta en que si entro desde paso1.php?nombre=carlos&apellido=medina  me manda el mensaje de error indicandome que no he entrado desde paso1.php

de que manera deberai poner el codigo entonces en mi archivo paso2.php

no lo he logrado aun, si me pudieras ayudar con eso te lo agradecería por siempre.
Puede servir de esta manera?

Código (php) [Seleccionar]
<?php
    $carpeta 
str_replace($_SERVER['DOCUMENT_ROOT'], ''dirname($_SERVER['SCRIPT_FILENAME']));
    
$ruta "https://$_SERVER[HTTP_HOST]$carpeta/paso1.php";
    
$aux = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
    
$referer substr($aux0strpos($aux'?'));

    if(
$referer !== $ruta){
            echo 
"Solo se puede acceder por paso1.php";
            die();
        }else{
            echo 
"Entró desde paso1.php";
        }
    
?>

engel lex

por qué te matas haciendo locuras? XD has igual que yo y usa explode.... partes por "?" y tomas el primer segmento
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.