Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427

    area riservata e cookies

    hello!
    Sto cercando di trovare una soluzione "sicura" e "affidabile",
    per il controllo di acceso ad una pagina.

    Ho provato a utilizzare un cookies ed una sessione ma il problema resta sempre in quanto quando la sessione scade (session.sessionid)
    l'accessa alla pagina non sarà più disponibile.

    A questo punto mi è venuta una soluzione ibrida...

    prendere il session id al momento del login...
    memorizzarlo nel cookies e nel db...

    richiamarlo per verificare che i valori coincidono ogni volta che si prova l'accesso ad una pagina.
    Ogni volta che effettuo l'accesso si effettua un update del sessionid ottenendo un nuovo valore.

    La cosa sembra fattibile,ma mi sembra un pò troppo pesante per il server.

    Potete darmi un consiglio per snellire la procedura?
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di fraude
    Registrato dal
    Feb 2004
    Messaggi
    2,870
    Scusa ma perchè utilizzi Session.SessionID per le sessioni?

  3. #3
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    perchè ottengo un numero di sessione univoco?

  4. #4
    Utente di HTML.it L'avatar di fraude
    Registrato dal
    Feb 2004
    Messaggi
    2,870
    Originariamente inviato da agenti
    perchè ottengo un numero di sessione univoco?
    Bé a parte il fatto che non esiste certezza matematica che la sessione sia sempre univoca...

    in tutti i modi da tempo ho sperimentato questo metodo con il quale controllo l' acceso a pagine protette (sempre se sei interessato).

    1) Ho previsto nel db un campo chiamato IDUser nel quale memorizzo l'ID generato dal campo contatore della tabella;

    2) al momento del login creo il cookie:
    codice:
    Response.Cookies("accesso")("valido")="ok"
    Response.Cookies("accesso").expires = DateAdd("n",60, Now())
    Response.Cookies("accesso")("nome")=objRS("IDUser")
    3) controllo la validità del cookie nelle pagine protette:
    codice:
    <%
    response.expires = -1500 
    response.AddHeader "PRAGMA", "NO-CACHE"
    response.CacheControl = "PRIVATE"
    
    If request.cookies("accesso")("valido")<>"ok" Then %>
    <script> 
    window.open("password.asp?referer=<%=Request.ServerVariables("URL")%>","nomeFinestra","top=250,left=350,width=300,height=250"); 
    </script> 
    <% 
    Response.End 
    End If 
    %>
    In questo modo ogni utente avrà la sua sessione utente (in pratica il suo ID), che in questo caso è certo al 100% e la sessione scadrà dopo 60 minuti.

  5. #5
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    in effetti è una variante a quello che ho descritto prima...

    in ogni caso session.sessionid è univoco al 100% solo che se si effettuà un reset del sistema le sessioni si azzerano dalla memoria del server e si possono ripresentare.

    Ma in quel caso il dato viene memorizzato nel db e modificato ogni accesso...

    quindi non cambia molto dalla tua idea...
    solo che nella tua idea avrai una tabella che "gonfia" nel mio caso serve solo un campo nella tabella angrafica.

    dimmi se ho torto forse ho capito male.

    Ciao

    p.s.
    cosa fai con questi comandi?

    response.expires = -1500
    response.AddHeader "PRAGMA", "NO-CACHE"
    response.CacheControl = "PRIVATE"

  6. #6
    Utente di HTML.it L'avatar di fraude
    Registrato dal
    Feb 2004
    Messaggi
    2,870
    Intanto per approfondire la questione questo articolo forse è utile:
    http://freeasp.html.it/guide/lezione.asp?id=80

    Riguardo alle osservazioni:

    1) Eseguire una query di update che aggiorni la session.sessionID ogni qualvolta che bisogna riaccedere all'area riservata, mi sembra (a mio modesto avviso) uno spreco inutile di risorse (apri la connessione, inizializza il rs, esegui la query, apri il rs, etc); l'utilizzo dei cookies per le sessioni li hanno inventati apposta.

    2) La tabella degli account non si "gonfia"; utilizzo un DB Access (con tutti gli svantaggi del caso) e con circa 4.000 account autorizzati alla navigazione, il DB non supera i 500 kB di peso;

    3) Riguardo a
    codice:
    response.expires = -1500 
    response.AddHeader "PRAGMA", "NO-CACHE" 
    response.CacheControl = "PRIVATE"
    leggi qui

  7. #7
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    scusa se continuo ma voglio capire...

    1) Eseguire una query di update che aggiorni la session.sessionID ogni qualvolta che bisogna riaccedere all'area riservata, mi sembra (a mio modesto avviso) uno spreco inutile di risorse (apri la connessione, inizializza il rs, esegui la query, apri il rs, etc); l'utilizzo dei cookies per le sessioni li hanno inventati apposta.


    mettiamo che io faccio il login...

    mentre faccio il login faccio un update del campo |sessionid|
    prendondo il valore dalla session.sessionid in quel dato momento.

    Contemporaneamente aggiorno il cookies con il valore dato da session.sessionid.
    FAccio un session.abandon e cancello la sessione.

    a questo punto ho memorizzato nel db il nuovo valore sincronizzato con il valore dei cookies.

    tu dici:
    Ho previsto nel db un campo chiamato IDUser nel quale memorizzo l'ID generato dal campo contatore della tabella;

    quindi dovrai creare un recordset ogni volta per paragonare il tuo cookies con il valore del campo iDuser...

    la stessa cosa faccio io aprendo il rs. e paragonandolo con il valore del db.

    ogni volta che effettuo l'accesso sia il valore del cookies sia del db si aggiornano.

    fammi sapere se ho sempre capito male.
    Ciao.

  8. #8
    Utente di HTML.it L'avatar di fraude
    Registrato dal
    Feb 2004
    Messaggi
    2,870
    Originariamente inviato da agenti
    tu dici:
    Ho previsto nel db un campo chiamato IDUser nel quale memorizzo l'ID generato dal campo contatore della tabella;

    quindi dovrai creare un recordset ogni volta per paragonare il tuo cookies con il valore del campo iDuser...
    No, non mi sono spiegato:

    1) Al momento della registrazione di un nuovo utente all'area riservata del sito, oltre a registrare nella tbl "codici" del DB Access i classici dati richiesti (generalità, email città, etc), memorizzo l'ID generato dal campo contatore - chiave primaria nel campo IDUser della stessa tabella codici; supponiamo che si registra l'utente Giancarlo il cui IDUser sarà il 67;


    2) L'utente Giancarlo si logga, ne controllo i dati:
    codice:
    SET objRS = Server.CreateObject("ADODB.Recordset")
    objRS.ActiveConnection = cn
     
    strSql = "SELECT * FROM codici WHERE userName='"&strUser&"' AND userCode='"&strCode&"'"
    objRS.Open strSQL
    
    ' se non esiste chiudo tutto
    IF objRS.EOF THEN
      ChiudiDB()
      Response.Redirect "logon.asp?referer=" & strReferer
    
    ' altrimenti genero il cookie con scadenza 1 ora
    ELSE 
      Response.Cookies("accesso")("valido")="ok"
      Response.Cookies("accesso").expires = DateAdd("n",60, Now())
      Response.cookies("accesso")("nome")=objRS("UserID")
      Session("user") = Request("user")
      Session("UserID") = objRS("UserID")
    La session("UserID") a questo punto conterrà il valore 67.

    3) controllo la validità del cookie nelle pagine protette:
    codice:
    <%
    response.expires = -1500 
    response.AddHeader "PRAGMA", "NO-CACHE"
    response.CacheControl = "PRIVATE"
    
    If request.cookies("accesso")("valido")<>"ok" Then %>
    <script> 
    window.open("password.asp?referer=<%=Request.ServerVariables("URL")%>","nomeFinestra","top=250,left=350,width=300,height=250"); 
    </script> 
    <% 
    Response.End 
    End If 
    %>
    Come potrai vedere apro la connessione al DB, inizializzo il rs, eseguo la query soltanto una volta al momento del login utente.

    Se non ho capito male ciò che vuoi realizzare prevede:

    1) una query per la verifica dei dati utente (login e password);
    2) creazione di una session.sessionID con memorizzazione nel cookie e nel db;
    3) riverifica dei dati utente ;
    4) query di update per aggiornare la session.sessionID

    In tutta sincerità mi sembrano passaggi ridondanti, però se ti piace così sei "padronissimo" di procedere come meglio ritieni opportuno...

    qui si danno consigli ed indicazioni, ma non si impone mai la propria metodologia di lavoro...

  9. #9
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    Io cerco solo di trovare una soluzione migliore forse la tua lo è e sto cercando di capire.. visto che sono tordo...

    allur...

    Response.Cookies("accesso")("valido")="ok"
    Response.Cookies("accesso").expires = DateAdd("n",60, Now())
    Response.cookies("accesso")("nome")=objRS("UserID" )
    Session("user") = Request("user")
    Session("UserID") = objRS("UserID")

    se l'utente è verificato...
    tu crei 2 cookies e 2 session...

    il controllo all'area riservata
    è questo:

    If request.cookies("accesso")("valido")<>"ok" Then %>
    redirect.... etc...
    end if

    perchè con questo codice:
    response.expires = -1500
    response.AddHeader "PRAGMA", "NO-CACHE"
    response.CacheControl = "PRIVATE"

    1)tu setti la scadenza della pagina
    2)definisci la pagina non scaricabile nella chache
    3)penso che serva a controllare la cache..

    calcolando che ci sono 2 session ancora aperte:

    Session("user") = Request("user")
    Session("UserID") = objRS("UserID")

    che in realtà non servono al controllo dell'area riservata...

    forse sbaglio ancora...?

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.