Ciao a tutti, ho il mio login system. Vorrei che una funzione venisse
chiamata periodicamente nel server (uso webrick, ma a volte Apache) e mi
andasse a controllare i file di sessione, resettando automaticamente le
sessioni di utenti inattivi da oltre X minuti. Qualcuno sa come si fa?
Grazie mille,
Giovanni Zangrillo.
Di base credo terminino dopo 10 minuti, cmq ci sono dei plugin:
http://www.rubyinside.com/sessiontimeout-a-rails-plugin-to-handle-short-term-session-timeouts-255.html
(ad es)
e cmq delle guide per farlo a mano (basta googlare tipo “rails set
session timeout”)
Giovanno Z. wrote:
Ciao a tutti, ho il mio login system. Vorrei che una funzione venisse
chiamata periodicamente nel server (uso webrick, ma a volte Apache) e mi
andasse a controllare i file di sessione, resettando automaticamente le
sessioni di utenti inattivi da oltre X minuti. Qualcuno sa come si fa?
Grazie mille,
Giovanni Zangrillo.
Grazie delle risposte, in realta’ vorrei soltanto che un utente loggato
venga automaticamente sloggato (e la session resettata) quando non
compie operazioni negli ultimi (ad ed.) 30 minuti. Pensavo di aggiungere
un campo “last_operation” in tabella users e quindi di lanciare un cron
che resetti automaticamente le sessions degli users con last_operation <
Time.now - x. Il problema è che non so come si imposta un processo a
cron, e se la procedura varia a seconda del server usato. Io uso Webrick
(per ora), ma alla bisogna pure Apache. Avete qualche idea? Di nuovo
grazie, Giovanni Zangrillo.
Michele C. wrote:
Giovanno Z. wrote:
Ciao a tutti, ho il mio login system. Vorrei che una funzione venisse
chiamata periodicamente nel server (uso webrick, ma a volte Apache) e mi
andasse a controllare i file di sessione, resettando automaticamente le
sessioni di utenti inattivi da oltre X minuti. Qualcuno sa come si fa?
Grazie mille,
Giovanni Zangrillo.
Non credo sia necessario intervenire manualmente. Si può impostare il
tempo delle sessioni, che in realtà sono cookie lato client.
Cerca su google i “comandi” html per farlo.Ciao Michele
Giovanno Z. wrote:
Ciao a tutti, ho il mio login system. Vorrei che una funzione venisse
chiamata periodicamente nel server (uso webrick, ma a volte Apache) e mi
andasse a controllare i file di sessione, resettando automaticamente le
sessioni di utenti inattivi da oltre X minuti. Qualcuno sa come si fa?
Grazie mille,
Giovanni Zangrillo.
Non credo sia necessario intervenire manualmente. Si può impostare il
tempo delle sessioni, che in realtà sono cookie lato client.
Cerca su google i “comandi” html per farlo.
Ciao Michele
Tommaso P. wrote:
Metti un cookie quando l’utente loggato compie un’operazione, che scade
30
minuti dopo, qualcosa tipo:
cookies[:last_user_operation]= {:value => “#{user.id}”, :expires =>
30.minutes.from_now}e poi metti un before_filter :verify_cookie nel controller application
che
verifica la presenza del cookie e se non c’è ¦a il logout della personadef verify_cookie
fai_il_logout unless cookies[:last_user_operation]
endOn Wed, Feb 27, 2008 at 12:10 AM, Giovanno Z. <
Mi spiego meglio: supponiamo che ho due utenti loggati e che questi
chiudano il browser senza eseguire logout. Io ho un campo “logged” nella
tabella users che vorrei mettere a 0 se un utente non esegue nulla
nell’ultima mezz’ora. Se nessun utente compie operazioni io NON SO come
si fa a lanciare un qualsivoglia processo. Vorrei che fosse il server
stesso a lanciare questo processo di controllo in vece di un utente.
Vorrei sapere come fare e quali file vanno modificati. Grazie, Giovanno.
Metti un cookie quando l’utente loggato compie un’operazione, che scade
30
minuti dopo, qualcosa tipo:
cookies[:last_user_operation]= {:value => “#{user.id}”, :expires =>
30.minutes.from_now}
e poi metti un before_filter :verify_cookie nel controller application
che
verifica la presenza del cookie e se non c’è fa il logout della persona
def verify_cookie
fai_il_logout unless cookies[:last_user_operation]
end
On Wed, Feb 27, 2008 at 12:10 AM, Giovanno Z. <
Giovanno Z. wrote:
Tommaso P. wrote:
Metti un cookie quando l’utente loggato compie un’operazione, che scade
30
minuti dopo, qualcosa tipo:
cookies[:last_user_operation]= {:value => “#{user.id}”, :expires =>
30.minutes.from_now}e poi metti un before_filter :verify_cookie nel controller application
che
verifica la presenza del cookie e se non c’è ¦a il logout della personadef verify_cookie
fai_il_logout unless cookies[:last_user_operation]
endOn Wed, Feb 27, 2008 at 12:10 AM, Giovanno Z. <
Mi spiego meglio: supponiamo che ho due utenti loggati e che questi
chiudano il browser senza eseguire logout. Io ho un campo “logged” nella
tabella users che vorrei mettere a 0 se un utente non esegue nulla
nell’ultima mezz’ora. Se nessun utente compie operazioni io NON SO come
si fa a lanciare un qualsivoglia processo. Vorrei che fosse il server
stesso a lanciare questo processo di controllo in vece di un utente.
Vorrei sapere come fare e quali file vanno modificati. Grazie, Giovanno.
Ti posso dire come gestisco io le operazioni di “cron” per le
applicazioni web su ruryonrails:
Creo un programmino in ruby che gestisca tutte le operazioni che mi
servono, comunemente uso drb in quanto ho quasi sempre necessità di far
dialogare altre applicazioni con questa ma in linea di principio puoi
anche non esporlo.
Solitamente uso Daemonize per gestire le thread ma puoi trovare
sicuramente tanti plugin che fanno lo stesso
2008/2/28 Alessandro S. [email protected]:
Ti posso dire come gestisco io le operazioni di “cron” per le
applicazioni web su ruryonrails:
…
Se le operazioni non devono essere troppo frequenti allora puoi anche
usare
direttamente cron dal quale ad esempio lanciare un metodo di un modello
via
script/runner
Luca
Alessandro S. wrote:
Luca M. wrote:
2008/2/28 Alessandro S. [email protected]:
Ti posso dire come gestisco io le operazioni di “cron” per le
applicazioni web su ruryonrails:…
Se le operazioni non devono essere troppo frequenti allora puoi anche
usare
direttamente cron dal quale ad esempio lanciare un metodo di un modello
via
script/runnerLuca
sì l’unico problema di cron è che non “osserva” in tempo reale
comportamenti, quindi non puoi ad esempio forzare l’esecuzione o
spostare dinamicamente i tempi dei controlli, cmq se devi “solo”
controllare ogni tot minuti se l’utente è on-line è una soluione molto
poco costosa e quindi ottima
Grazie, grazie mille, era quello che volevo sentirmi dire. In questi
giorni già avevo fatto un pò di prove con la console (runner) e pensavo
di usare CRON, solo che non riesco ad avere la gemma (il sito del tizio
che l’ha scritto è offline e poi dicunt che CRON è deprecato). Qualcuno
sa dirmi dove posso scaricarmi il CRON con relativa documentazione? Poi
non vi stressero’ mai piu’, giuro…grazie mille di nuovo, Giovanni
Zangrillo.
Luca M. wrote:
2008/2/28 Alessandro S. [email protected]:
Ti posso dire come gestisco io le operazioni di “cron” per le
applicazioni web su ruryonrails:…
Se le operazioni non devono essere troppo frequenti allora puoi anche
usare
direttamente cron dal quale ad esempio lanciare un metodo di un modello
via
script/runnerLuca
sì l’unico problema di cron è che non “osserva” in tempo reale
comportamenti, quindi non puoi ad esempio forzare l’esecuzione o
spostare dinamicamente i tempi dei controlli, cmq se devi “solo”
controllare ogni tot minuti se l’utente è on-line è una soluione molto
poco costosa e quindi ottima
Giovanno Z. wrote:
Alessandro S. wrote:
Luca M. wrote:
2008/2/28 Alessandro S. [email protected]:
Ti posso dire come gestisco io le operazioni di “cron” per le
applicazioni web su ruryonrails:…
Se le operazioni non devono essere troppo frequenti allora puoi anche
usare
direttamente cron dal quale ad esempio lanciare un metodo di un modello
via
script/runnerLuca
sì l’unico problema di cron è che non “osserva” in tempo reale
comportamenti, quindi non puoi ad esempio forzare l’esecuzione o
spostare dinamicamente i tempi dei controlli, cmq se devi “solo”
controllare ogni tot minuti se l’utente è on-line è una soluione molto
poco costosa e quindi ottimaGrazie, grazie mille, era quello che volevo sentirmi dire. In questi
giorni già avevo fatto un pò di prove con la console (runner) e pensavo
di usare CRON, solo che non riesco ad avere la gemma (il sito del tizio
che l’ha scritto è offline e poi dicunt che CRON è deprecato). Qualcuno
sa dirmi dove posso scaricarmi il CRON con relativa documentazione? Poi
non vi stressero’ mai piu’, giuro…grazie mille di nuovo, Giovanni
Zangrillo.
Per cron intendevamo il servizio cron di linux(almeno io), per il resto
la lib cron tempo fà la cercai anche io ma se ne trovano solo vecchie
versioni non molto funzionantiio di solito per cose semplici uso
direttamente :
Process.detach fork {
loop do
sleep(5) #secondi
#codice quì
end
}
Ma sono noioso ma non capisco, qual’è il problema a lasciar fare al
server? Se imposti che la sessione deve durare mezzora, la sessione dura
mezzora, senza cron o job che devi gestire tu.
Cos’è che non ti piace in questa soluzione?
Giovanno Z. wrote:
Mi spiego meglio: supponiamo che ho due utenti loggati e che questi
chiudano il browser senza eseguire logout. Io ho un campo “logged” nella
tabella users che vorrei mettere a 0 se un utente non esegue nulla
nell’ultima mezz’ora.
Chi setta il campo logged a 1? Se lo fai tu stesso puoi fare un campo
ora_ultima_request che setti a now() a ogni request, e poi fai girare un
job sul db che ogni 10 minuti si razzola la tabella andando a vedere se
quel campo è stato settato più di 10 minuti fa e in caso setta logged a
0.
Se nessun utente compie operazioni io NON SO come
si fa a lanciare un qualsivoglia processo.
Infatti così non si può fare. Non c’è niente che “scatta” o che viene
chiamato se un’utente non fa niente per un certo periodo. Dovresti
implementarlo tu.
Vorrei sapere come fare e quali file vanno modificati. Grazie, Giovanno.
Ma vuoi settare un campo sul db a 0 o vuoi proprio eliminare la sessione
dal server in modo che l’utente dovrà rifare il login quando torna? Nel
secondo caso dovresti dirci quale session store usi.
Michele C. wrote:
Ma sono noioso ma non capisco, qual’è il problema a lasciar fare al
server? Se imposti che la sessione deve durare mezzora, la sessione dura
mezzora, senza cron o job che devi gestire tu.
Cos’è che non ti piace in questa soluzione?
Personalmente ritengo che usare il coocki session store e fidarsi che il
cookie scada lato client non è sufficiente. Il client potrebbe anche
settare il cookie in modo che non scada mai, e rimarrebbe loggato
all’infinito. Invalidare le sessioni lato server è sicuramente più
sicuro.