Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    memorizzare dati nella CACHE

    Ho bisogno di mantenere in una cache l'IP dell'utente che accede al mio sito. Che strumento posso utilizzare per mantenere un dato nella cache per un tot secondi e poi accedere alla cache per vedere se è presente? Come possono aiutarmi le classi Classi Cache e Session di Asp.Net 2.0 ?

    Va bene accedere all'IP attraverso la funzione Request.UserHostAddress?


    PS:Se qualcuno potesse postare qualche riga in VB sarebbe fantastico!![8D]

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Credo che anche

    codice:
    Dim ClientIP as string = Request.ServerVariables("REMOTE_ADDR").ToString
    vada bene. Per il resto, potresti memorizzarlo in un cookie...

  3. #3
    Ora stavo provando con un DataTable...

    'Creo il DataTable
    Dim dt As DataTable = New DataTable("ipUtenti")

    'Creo le colonne
    Dim dcIp As New DataColumn("ip", GetType(String))
    Dim dcTime As New DataColumn("time", GetType(Date))

    'Aggiungo le colonne al DataTable
    dt.Columns.Add(dcIp)
    dt.Columns.Add(dcTime)

    'Aggiungo le righe
    Dim dr As DataRow
    dr = dt.NewRow()
    dr("ip") = Request.UserHostAddress
    dr("time") = Date.Now
    dt.Rows.Add(dr)
    Però come faccio ad accedere ai dati? E a fare in modo che i dati rimangano nella cache solo per un tot tempo??

    Altrimenti come potrei utilizzare i cookie, come tu suggerisci?

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    codice:
    Response.Cache.SetExpires(DateTime.Now.AddSeconds(60)) ' 60 secondi 
    Response.Cache.SetCacheability(HttpCacheability.Public)
    Response.Cache.SetSlidingExpiration(True)
    Response.Cache.VaryByParams("nomeparametro") = True
    Questo setta la scadenza della cache a 60 secondi, e fa variare la pagina se varia "nomeparametro" (per es. della querystring).


    Per i cookies:

    Scrittura:
    codice:
              If Request.Browser.Cookies Then
                    Dim biscotto As New HttpCookie("biscotto")
                    Dim chiaveunivoca As String = System.Guid.NewGuid().ToString()
                    biscotto("id") = chiaveunivoca.ToString
                    biscotto("ip") = tua variabile ip                 
                    biscotto.Expires = Now.AddYears(1) ' dura un anno
                    HttpContext.Current.Response.Cookies.Add(biscotto)
              End If
    Lettura:
    codice:
            Dim biscotto As HttpCookie = Request.Cookies("biscotto")
    
            If Request.Browser.Cookies = True And Not IsNothing(biscotto) Then
               Dim ClientIP as String = Biscotto("ip")
            End If

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Per il tuo datatable, credo che basti metterlo nella cache

    Cache("dt") = dt

    e poi accedervi con:

    codice:
    If not isnothing(Cache("dt")) then
       dim dt2 as datatable
       dt2 = cache("dt")
       ip = dt2.Rows(0).Item(0)
    End if

  6. #6
    Mi consigli di tenere il datatable e memorizzarlo temporaneamente nella cache o utilizzare direttamente la cache andando a memorizzare chiavi e vaolri in quest'ultima?

    Il mio obiettivo finale è: fare in modo che un utente spinga un bottone una seconda volta solo dopo che sia passato un tot tempo dalla prima volta che lo ha spinto

    Protected Sub btn_on_click

    cerca IP nella cache
    if IP è in cache (l'utente ha già cliccato il bottone in questa sessione)
    then -> aspetta
    else (l'utente non ha cliccato il bottone negli ultimi x secondi)
    -> ok (accedi al servizio)

    end sub

    Memorizzando le chiavi-valori IP-ultimoAccesso nel datatable e quindi mettendo il datatable nella cache (per un lasso di tempo definito dal SetExpires(...) ), non c'è il rischio che i valori vengano aggiornati al momento in cui l'utente clicca il bottone?

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Un datatable o la cache non sono proprio leggeri.

    Io memorizzerei l'IP ed il timestamp nella Session, ed al click del bottone controllerei che siano passati i secondi che devono passare e che l'ip ci sia. Se si, accedo al servizio. Se no, un avviso.

  8. #8
    Io ho pensato di ricorrere alla cache o al datatable proprio per il problema di quantizzare il tempo trascorso....non riesco a vedere altro modo per controllare
    che siano passati i secondi che devono passare e che l'ip ci sia
    ... è proprio questo il punto in cui ho più difficoltà... dove memorizzo la data del momento del primo accesso dell'utente per poi confrontarla con quella attuale?


    PS: potresti postare qualche riga di codice su come memorizzare l'IP ed il timestamp nella Session?
    PPS: scusa se metto a dura prova la tua disponibilità, ma con Asp sono ancora alle prime armi...i tuoi consigli sono davvero preziosi!!

  9. #9
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Originariamente inviato da dosdosdos
    Io ho pensato di ricorrere alla cache o al datatable proprio per il problema di quantizzare il tempo trascorso....non riesco a vedere altro modo per controllare ... è proprio questo il punto in cui ho più difficoltà... dove memorizzo la data del momento del primo accesso dell'utente per poi confrontarla con quella attuale?


    PS: potresti postare qualche riga di codice su come memorizzare l'IP ed il timestamp nella Session?
    PPS: scusa se metto a dura prova la tua disponibilità, ma con Asp sono ancora alle prime armi...i tuoi consigli sono davvero preziosi!!
    ma nel frattempo l'utente puo fare altre cose oppure la pagina deve essere 'congelata' ?

  10. #10
    in teoria dovrebbe poter fare altre cose...sto implementando questa funzione per la ricerca di parole all'interno di un forum, per fare in modo che non vengano effettuate troppe richieste in successione, quindi tra una ricerca e un'altra da parte dello stesso utente deve passare un certo tempo...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.