• Publicidad

Controlar el caché de las páginas visitadas

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Controlar el caché de las páginas visitadas

Notapor Negrazo » 2011-07-08 14:17 @637

Hola a todos:

Recién hice un módulo para paginación de algunos reportes que son muy grandes (arriba de 20-30 páginas) y me funciona bien, pero lo que no es nada práctico es que al cliquear el botón Atrás en cualquier browser, me va llevando por todas las páginas que he visitado.

¿Cómo puedo evitar esto?

Cualquier tip es bienvenido.
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico

Publicidad

Re: Controlar el caché de las páginas visitadas

Notapor explorer » 2011-07-08 17:03 @752

La definición de los botones 'Atrás' en los navegadores son, precisamente eso: moverse por las páginas que se han visto antes.

En el ejemplo que has puesto, quizás un usuario quiere volver a ver una de las 20 páginas del informe, que ya ha visto, y por eso quiere volver.

Si lo que quieres es que el usuario vuelva al principio del informe, o a otro sitio, solo tienes que agregar un enlace en la página, que lo lleve a ese sitio.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Controlar el caché de las páginas visitadas

Notapor Negrazo » 2011-07-10 22:10 @965

Hola explorer:

Efectivamente ya hice lo que tu propones, pero aun así, después de ese enlace me sigue guardando la historia de todas las páginas visitadas.

¿¿¿¿Hay alguna forma de alterar dicha historia????

Gracias por tu respuesta.

Negrazo
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico

Re: Controlar el caché de las páginas visitadas

Notapor explorer » 2011-07-11 05:49 @284

Una cosa es manipular la historia, y otra, decirle al navegador que no almacena las páginas. Para este segundo caso, si tienes control sobre las cabeceras HTTP que envías, podrías enviar la de no-cache, y así no se almacenarán las páginas.

O, también, incluirlas en los <meta> de la cabecera de las páginas:

<meta http-equiv="Cache-control" content="no-cache">
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Controlar el caché de las páginas visitadas

Notapor Negrazo » 2011-07-11 13:17 @595

Hola, explorer:

Creo que me voy a ir por el lado de Control-cache en los headers. Se me hace más practico que manipular la historia; ahora bien, ya lo probé en un reporte muy sencillo y no me está funcionando, seguramente algo me falta o lo puse mal, ¿¿¿pudieras echarle una revisada a mi código???
Gracias.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!\perl\bin
  2.  
  3. require 'paginar.pl';
  4. require 'connectDB.pl';
  5. use CGI::Carp qw(fatalsToBrowser);
  6. use DBI;
  7. use CGI qw(param uploadInfo);
  8. use CGI;
  9. use CGI qw(:standard);
  10. use CGI::Session;
  11. use Date::Simple ( 'date', 'today' );
  12. use Date::Calc qw(:all);
  13. my $dt = today();
  14.  
  15. my @doc       = "";
  16. my @doc1      = "";
  17. my $count     = 0;
  18. my $countn    = 0;
  19. my $con       = "";
  20. my $mes       = "";
  21. my $num       = "";
  22. my $cicloctrl = "";
  23.  
  24. # grupo de variables para paging
  25. my $init   = param('init');
  26. my $next   = $init + 10;
  27. my $prev   = $init - 10;
  28. my $i      = $init + 1;
  29. my $ult    = 0;
  30. my $rem    = 0;
  31. my $prog1  = "gralxbirth.pl";
  32. my $prog2  = "reportesinscs.pl";
  33. my $pagina = 0;
  34. my $de     = 0;
  35. my $ent    = 0;
  36. my $school = "";
  37. my @params = "";
  38. my $countn = 0;
  39. my $nivel  = param('nivel');
  40. my $par    = "";
  41.  
  42. my $cgi       = new CGI;
  43. my $CGISESSID = $cgi->param('CGISESSID');
  44. my $session
  45.     = CGI::Session->load( "driver:File", $CGISESSID,
  46.     { 'Directory' => '/temp/' } )
  47.     or die CGI::Session->errstr;
  48.  
  49. print "Content-type: text/html\n\n";
  50. print start_html(
  51.     -title   => 'Reporte de Cumpleaños general',
  52.     -bgcolor => '#cccccc'
  53. );
  54. print "<HEAD>";
  55. print "<META http-equiv='Cache-control' content='no-cache'>";
  56. print "</HEAD>";
  57. print
  58.     "<p align='center'><img src='logo1.gif' border='0' name='banner' ></ a> <br> < /p>";
  59.  
  60. my $aut = $session->param('Aut01');
  61. if ( $aut eq '1' ) {
  62.  
  63.     # Configurar el acceso a la DB
  64.     $con = connectDB::Conn($m)
  65.         or die "No puedo conectarme  a la database\n";
  66.  
  67.     my $sth1 = $con->prepare("SELECT  ciclo, nombre_esc FROM control ");
  68.     $sth1->execute() or die "No puedo leer Control....$!";
  69.     my @doc1 = $sth1->fetchrow_array;
  70.     {
  71.         $cicloctrl = $doc1[0];
  72.         $school    = $doc1[1];
  73.     }
  74.     $pagina = ( $init / $paginar::entries ) + 1;
  75.  
  76.     # obtengo paginas y encabezados
  77.  
  78.     my $sth1
  79.         = $con->prepare(
  80.         qq(SELECT count(*)  FROM alumnos where status = 'Activo' and ciclo='$cicloctrl' )
  81.         );
  82.     $sth1->execute() or die "Error en Alumnos...";
  83.     @doc1   = $sth1->fetchrow_array;
  84.     $countn = $doc1[0];
  85.  
  86.     $de  = ( $countn % $paginar::entries );
  87.     $ent = $countn - $de;
  88.     $de  = ( $ent / $paginar::entries ) + 1;
  89.     print basefont ( { -face => 'Arial' } );
  90.     print "<H2 align='center'><B>$school </H2></B>";
  91.     print "<H2 align='center'><B>Inscripciones y Alumnos</H2></B>";
  92.  
  93.     print font ( { -size => '4', -color => 'Red' },
  94.         "Cumpleaños de  Alumnos" );
  95.     print "<BR>";
  96.  
  97.     # llamo al modulo paginar
  98.     @params = (
  99.         $prog1,  $CGISESSID, $prev,  $next, $ult, $prog2,
  100.         $countn, $init,      $nivel, $dt,   $de
  101.     );
  102.     $par = \@params;
  103.     do paginar::Paginacion($par);
  104.     print "<B>---------    Pagina:  $pagina  de  $de</B>";
  105.  
  106.     print "<TABLE align='center' border='3' >\n";
  107.     print
  108.         "<TR><TH>Cont.</TH><th>Codigo</th><th>Nombre</th><th>Ap.Paterno</th><th>Ap.Materno</th><th>Sexo</th><th>Nivel</th><th>Grado</th><th>Grupo</th><th>Mes</th><th>Dia</th></TR>\n";
  109.  
  110.     my $sth
  111.         = $con->prepare(
  112.         qq(SELECT codigo,nombre,paterno,materno,sexo,grado, grupo, month (nacimiento), day (nacimiento), nivel  FROM alumnos where status = 'Activo' and ciclo='$cicloctrl' order by month(nacimiento),day(nacimiento) limit $init, $paginar::entries)
  113.         );
  114.  
  115.     $sth->execute() or die "Error en Alumnos..";
  116.     while ( @doc = $sth->fetchrow_array ) {
  117.         if ( $doc[7] eq '1' )  { $mes = 'Ene'; }
  118.         if ( $doc[7] eq '2' )  { $mes = 'Feb'; }
  119.         if ( $doc[7] eq '3' )  { $mes = 'Mar'; }
  120.         if ( $doc[7] eq '4' )  { $mes = 'Abr'; }
  121.         if ( $doc[7] eq '5' )  { $mes = 'May'; }
  122.         if ( $doc[7] eq '6' )  { $mes = 'Jun'; }
  123.         if ( $doc[7] eq '7' )  { $mes = 'Jul'; }
  124.         if ( $doc[7] eq '8' )  { $mes = 'Ago'; }
  125.         if ( $doc[7] eq '9' )  { $mes = 'Sep'; }
  126.         if ( $doc[7] eq '10' ) { $mes = 'Oct'; }
  127.         if ( $doc[7] eq '11' ) { $mes = 'Nov'; }
  128.         if ( $doc[7] eq '12' ) { $mes = 'Dic'; }
  129.  
  130.         $j = $j + 1;
  131.         if ( $j eq 1 ) {
  132.             $ant = $doc[7];
  133.         }
  134.         if ( $ant ne $doc[7] ) {
  135.             print "<tr>";
  136.             print
  137.                 "<B><th>=======</th><th>=======</th><th>=======</th><th>=======</th><th>======</th><th>========</th><th>========</th><th>========</th><th>========</th><th>========</th><th>========</th></B>";
  138.             print "</tr\n";
  139.             $ant = $doc[7];
  140.         }
  141.  
  142.         print "<tr>";
  143.         print
  144.             "<B><TD>$i</TD><td>$doc[0]</td><td>$doc[1]</td><td>$doc[2]</td><td>$doc[3]</td><td>$doc[4]</td><td>$doc[9]</td><td>$doc[5]</td><td>$doc[6]</td><td>$mes</td><td>$doc[8]</td></B>";
  145.         print "</tr\n";
  146.         $i++;
  147.         $init;
  148.     }
  149.     print "</TABLE>\n";
  150.  
  151. }
  152. else {
  153.     print font (
  154.         { -size => '5', -color => 'Red' },
  155.         'No tienes autorizacion para esta opcion'
  156.     );
  157.     print "<BR>";
  158.     print button(
  159.         -name    => 'back',
  160.         -value   => 'Atras',
  161.         -onClick => 'history.go(-1)'
  162.     );
  163. }
  164. $con->disconnect;
  165. print "</html>\n";
  166.  
  167. exit;
  168.  
Coloreado en 0.009 segundos, usando GeSHi 1.0.8.4
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico

Re: Controlar el caché de las páginas visitadas

Notapor explorer » 2011-07-11 18:48 @825

* Las líneas
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use CGI qw(param uploadInfo);
  2. use CGI;
  3. use CGI qw(:standard);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
se reducen a
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use CGI qw(:standard);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
(no creo que sea necesario importar explícitamente uploadinfo).

* En la línea 39 empiezas a usar la función param(), del módulo CGI, indicando que vas a usar ese módulo en el estilo de funciones, pero en la línea 42 creas un objeto CGI, con lo que entonces te comprometes a usar el módulo en el estilo orientado a objetos... un lío... tendrás que decidirte por uno de los dos estilos. O el funcional o el orientado a objetos.

* ¿Por qué existe la línea 49? Usando el módulo CGI no necesitas escribir eso. Con print $cgi->header(); ya lo tendrías resuelto. Es más: incluso puedes usarlo para enviar las cabeceras que te interesan, como son las de cacheo. Mira este ejemplo, y verás cómo se usa Pragma (para el protocolo HTTP v1.0) y Control-Cache (para el HTTP v1.1). Hoy en día, con el Control-Cache es más que suficiente.

* No necesitas las líneas 54 a 56 si emites el control de caché con el header().

* Usar las funciones de generación de código HTML del módulo CGI, a veces parecen más un fastidio que una ayuda, pero dejan el código más limpio. Ejemplo de la línea 57:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print
  2.     $cgi->p({-align=>'center'},
  3.         $cgi->img({-src=>'logo1.gif', -border=>'0', -name=>'banner'})
  4.       . $cgi->br()
  5. );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Lo bueno... es que nos ahorra algunos errores... Fíjate que en esa línea has puesto un '</a>', que no corresponde con ningún '<a>' anterior.

* Las líneas 117 a 128 se reducen a
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $mes = (qw(xxx Ene Feb Mar Abr May Jun Jul Ago Sep Oct Nov Dic))[$doc[7]];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
aunque quedaría más claro así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @meses = qw(xxx Ene Feb Mar Abr May Jun Jul Ago Sep Oct Nov Dic);
  2. $mes = $meses[$doc[7]];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


* Si $j contiene un número, es mejor que la línea 131 se escriba con un '==' en lugar de un 'eq'. El mismo cuidado debería prestarse en la 137, poniendo un '!=' en lugar del 'ne'.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Controlar el caché de las páginas visitadas

Notapor Negrazo » 2011-07-12 17:10 @757

Estimado explorer:

Debo confesar que yo he aprendido algo de Perl en forma muy autónoma y rústica, viendo ejemplos aquí y allá y admito que mis hábitos de programación, pues son el resultado de lo que he visto, y te agradezco que me corrijas lo que tu consideres que se puede simplificar o hacer mejor.
Te anexo el programa ya "mejorado", que funciona bien, pero todavía me sigue guardando en caché la visita.
¿¿¿Qué me falta por hacer o qué estoy haciendo mal???

=====================================================
#!\perl\bin

require 'paginar.pl';
require 'connectDB.pl';
use CGI::Carp qw(fatalsToBrowser);
use DBI;
use CGI qw(:standard);
use CGI::Session;
use Date::Simple ('date', 'today');
use Date::Calc qw(:all);
my $dt = today();
use POSIX qw(strftime);
my @doc = "";
my @doc1 = "";
my $count = 0;
my $countn = 0;
my $con = "";
my $mes = "";
my $num = "";
my $cicloctrl = "";
my @meses = qw(xxx Ene Feb Mar Abr May Jun Jul Ago Sep Oct Nov Dic);
# grupo de variables para paging
my $next = $init + 10;
my $prev = $init - 10;
my $i = $init + 1;
my $ult = 0;
my $rem = 0;
my $prog1 = "gralxbirth.pl";
my $prog2 = "reportesinscs.pl";
my $pagina = 0;
my $de = 0;
my $ent = 0;
my $school = "";
my @params = "";
my $countn = 0;
my $par = "";


my $cgi = new CGI;
my $CGISESSID = $cgi->param('CGISESSID');
my $session =
CGI::Session->load("driver:File",$CGISESSID,{'Directory'=>'/temp/'})
or die CGI::Session->errstr;
my $init = $cgi->param('init');

print CGI=>header(
# date in the past
-expires =>'Sat, 26 Jul 1997 05:00:00 GMT',
# always modified
#-Last_Modified => DateTime->now->strftime('%a, %d %b %Y %H:%M:%S GMT')
-Last_Modified => strftime('%a, %d %b %Y %H:%M:%S GMT', gmtime),
# HTTP/1.0
-Pragma =>'no-cache',
# HTTP/1.1
-Cache_Control =>join(', ', qw(private no-cache no-store must-revalidate max-age=0 pre-check=0 post-check=0 )),
);


print start_html(-title=>'Victoria', -bgcolor=>'#cccccc');

print "<BODY>";
print "<p align='center'><img src='logo1.gif' border='0' name='banner' ><br></p>";

my $aut = $session->param('Aut01');
if($aut eq '1' )
{

# Configurar el acceso a la DB
$con = connectDB::Conn($m)
or die "No puedo conectarme a la database\n";

my $sth1 = $con->prepare("SELECT ciclo, nombre_esc FROM control ");
$sth1->execute()or die "No puedo leer Control....$!";
my @doc1 = $sth1->fetchrow_array;
{
$cicloctrl = $doc1[0];
$school = $doc1[1];
}
$pagina = ($init / $paginar::entries) + 1;

# obtengo paginas y encabezados

my $sth1 = $con->prepare(qq(SELECT count(*) FROM alumnos where status = 'Activo' and ciclo='$cicloctrl' ));
$sth1->execute() or die "Error en Alumnos...";
@doc1 = $sth1->fetchrow_array;
$countn = $doc1[0];

$de = ($countn % $paginar::entries) ;
$ent = $countn - $de;
$de = ($ent / $paginar::entries) + 1;
print basefont ({-face=>'Arial'});
print "<H2 align='center'><B>$school </H2></B>";
print "<H2 align='center'><B>Inscripciones y Alumnos</H2></B>";

print font ({-size=>'4', -color=>'Red'},"Cumpleaños de Alumnos");
print "<BR>";

# llamo al modulo paginar
@params = ($prog1,$CGISESSID,$prev,$next,$ult,$prog2,$countn,$init,$nivel,$dt,$de);
$par = \@params;
do paginar::Paginacion($par);
print "<B>--------- Pagina: $pagina de $de</B>";

print "<TABLE align='center' border='3' >\n";
print "<TR><TH>Cont.</TH><th>Codigo</th><th>Nombre</th><th>Ap.Paterno</th><th>Ap.Materno</th><th>Sexo</th><th>Nivel</th><th>Grado</th><th>Grupo</th><th>Mes</th><th>Dia</th></TR>\n";

my $sth = $con->prepare(qq(SELECT codigo,nombre,paterno,materno,sexo,grado, grupo, month (nacimiento), day (nacimiento), nivel FROM alumnos where status = 'Activo' and ciclo='$cicloctrl' order by month(nacimiento),day(nacimiento) limit $init, $paginar::entries));

$sth->execute() or die "Error en Alumnos..";
while (@doc = $sth->fetchrow_array)
{
$mes = $meses[$doc[7]];
$j = $j + 1 ;
if($j == 1 )
{ $ant = $doc[7] ;
}
if($ant != $doc[7] ) {
print "<tr>";
print "<B><th>=======</th><th>=======</th><th>=======</th><th>=======</th><th>=======</th><th>========</th><th>========</th><th>========</th><th>========</th><th>========</th><th>========</th></B>";
print "</tr\n";
$ant = $doc[7] ;
}

print "<tr>";
print "<B><TD>$i</TD><td>$doc[0]</td><td>$doc[1]</td><td>$doc[2]</td><td>$doc[3]</td><td>$doc[4]</td><td>$doc[9]</td><td>$doc[5]</td><td>$doc[6]</td><td>$mes</td><td>$doc[8]</td></B>";
print "</tr\n";
$i++;
$init;
}
print "</TABLE>\n";

}
else
{ print font ({-size=>'5', -color=>'Red'},'No tienes autorizacion para esta opcion');
print "<BR>";
print button(-name=>'back', -value=>'Atras', -onClick=>'history.go(-1)'); }
$con->disconnect;
print "</BODY>";

print "</html>\n";

exit;

======================================================

Gracias nuevamente por tu ayuda.
Negrazo.
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico

Re: Controlar el caché de las páginas visitadas

Notapor explorer » 2011-07-12 17:23 @766

No es

print CGI=>header(

sino

print $cgi->header(

Otro detalle: estás declarando e inicializando $init después de usarlo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron