Newsgroup: it.comp.www.asp
Titolo: Prosegui sessione

Esiste un comando per far si che una sessione si prolunghi?
Cioe' se, dopo che ho iniziato una sessione in una pagina asp in cui ho
salvato delle variabili, visitando un'altra pagina asp (o la stessa), c'e'
un modo per far si che la durata della sessione riparta da zero senza
perdere il contenuto delle variabili.
Lo scopo e' far si che, finche' uno naviga nelle pagine di un progetto, la
sua sessione non scada mai e rimangano attive le variabili.
Giorgio Leonardi


^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v
Moderatore di it.comp.www.asp
Gruppo di supporto: 
http://www.asp-it.com
^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v^v
iPoint Network 
http://www.ipoint2000.net
 Servizi, siti ed altro!
Personalizza le tue notizie con 
http://www.ipoint2000.net/now

sua sessione non scada mai e rimangano attive le variabili.
Questo e' il comportamento di default di IIS!
Sarebbe un problema fare il contrario.
Ciao
Stefano


Forse o non sono stato chiaro io oppure qualcosa del funzionamento di IIS
non e' stato considerato da altri.
Ho provato a fare le seguenti pagine asp:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; iso-8859-1">
<title>Prova</title>
</head>
<body>
<% Session.timeout = 2
if session("valore") = "" then
 session("valore") = 1
else
 session("valore") = session("valore") + 1
end if
%>
valore = <%=session("valore")%>
<br>
<a href=prova2.asp?ref=<%=session("valore")%>>Prova</a>
</body>
e salvato in prova1.asp
E la corrispondente prova2.asp (dove ovviamente c'e' il riferimento a
prova1.asp.
Se premo sul link entro i due minuti mi viene caricata una pagina che mostra
il contenuto di valore incrementato di 1 (la pagina viene ricaricata perche'
avendo il valore dopo ref diverso il browser lo interpreta come pagina nuova
e la rilegge).
Se aspetto piu' di due minuti il contenuto di valore e' azzerato.
Il mio dubbio era: usando il comando session.timer faccio ripartire da 0 il
timer della sessione?
Se si, come sembra dall'esperimento, rimangono tutte le variabili o solo
quelle utilizzate nel nuovo asp?
Lo so che sembra un po' contorto ma il funzionamento di IIS sembra diverso
da quello che si suppone (come lo dimostrano anche alcune risposte che ho
ricevuto).
ps: lo stesso comportamento si ha anche con PWS.
Giorgio Leonardi

Giorgio Leonardi
Il significato Session.timeout = 2 e':
"Se l'utente non chiede nuove pagine entro due minuti, butta via la
sessione".
Il "timer" della sessione, da questo punto in avanti, viene azzerato ad ogni
richiesta di una nuova pagina ASP, indipendentemente dal fatto che questa
pagina setti o meno il valore di Session.timeout
Il comportamento che cerchi di ottenere tu, da quello che ho capito, e' un
tantino differente: tu vorresti che la sessione rimanesse attiva finche'
l'utente ha visualizzato una pagina del tuo sito, anche se in quel momento
e' andato a mangiare.
Questo ufficialmente non e' possibile, perche' il server non ha la
possibilita' di sapere se l'utente e' passato su un'altro sito o
semplicemente ci sta mettendo quaranta minuti a compilare un Form. Il server
si limita a non ricevere piu' richieste per un tempo elevato.
In realta', come per quasi tutte le cose impossibili, c'e' un modo per
aggirare il problema; ecco come ho fatto io:
Ho lasciato il timeout della sessione al suo valore standard di 20 minuti
Ho creato la seguente pagina che ho chiamato KeepAlive.asp:
<%@ Language=VBScript %>
<%
 Response.Expires = 0  ' Evito che la pagina sia conservata nella cache del
client
 Session("keep_alive") = 2  ' Accedo ad una variabile session qualsiasi.
Questo azzera il timer della sessione
%>
<HTML>
<HEAD>
   <META HTTP-EQUIV="REFRESH" CONTENT="600; URL=KeepAlive.asp">
</HEAD>
<BODY>
</BODY>
</HTML>
Questa pagina non fa assolutamente nulla e non visualizza assolutamente
nulla: si limita a ricaricarsi ogni 600 secondi (10 minuti).
Quindi ho aggiunto alla mia struttura a frames, un frame di dimensione 0 e
ci ho caricato la mia pagina.
In questo modo, finche' la struttura di frames rimarra' attiva nel browser,
questa pagina manterra' attiva la sessione. Quando l'utente cambiera' sito,
anche il frame nascosto non ci sara' piu' e la sessione sara' libera di
morire allo scadere del time-out.
Spero di aver capito il problema e di essere stato d'aiuto
Ciao
Stefano

morire allo scadere del time-out.
questa soluzione ha un impatto notevole sia sul server (immagini 3000
persone collegate contemporaneamente. Ogni 10 minuti il server fa un lavoro
immane!!!) e non è l'ideale, per alcuni brevi motivi.
- per mantenere lo stato di una navigazione anche quanto scada la sessione,
la cosa migliore è usare i cookie. Vi ricordo che le session sono dei
cookies speciale che scadono dopo tot minuti. Se non li vuoi far scadere usi
un cookie.
- i frames sono antiestici se usi un frame impostato a zero (prova con NS)
- i frame non sono graditi ai motori di ricerca, che hanno dei browser in
stile IE2 o NS1: in parole povere meno ci metti meglio lo leggono.
CIAO!.db


Per quando mi servira': grazie!
Ciao, Fabio Zed Zamparelli

Ho creato la seguente pagina che ho chiamato KeepAlive.asp:
Non volendo usare frame qualcuno ha un'idea di qualche altro trucco (che non
sia quello di far ricaricare automaticamente la pagina dopo, ad es., 19
minuti)?
Giorgio Leonardi

minuti)?
Tieni presente che l'utente non deve per forza vedere i frame
se usi un frameset del tipo
<frameset COLS="0,*" BORDER="0">
    <frame NAME="keepalive" SRC="keep_alive.asp">
    <frame NAME="contents" SRC="home.asp">
</frameset>
l'utente non si accorgera' nemmeno della presenza dei frame e l'aspetto del
sito rimarra' immutato
Ciao
Stefano

sito rimarra' immutato
Il problema pero' e' che la pagina principale deve essere a frame: se
qualcuno trova la mia pagina mediante un motore di ricerca devo mettere
delle istruzioni java per far si che non venga aperta autonomamente ma venga
aperta all'interno del frame.
Inoltre, problema forse maggiore, i motori di ricerca stanno iniziando a
scartare le pagine a frame e quindi ...
Giorgio Leonardi

stile IE2 o NS1: in parole povere meno ci metti meglio lo leggono.
A dire il vero non ho mai provato nessuna delle due cose, in quanto lavoro
su Intranet e gli utenti hanno tutti IE4, ma mi fido sulla parola.
Mi riprometto di provare quanto prima.
Ciao
Stefano