Visualizzazione dei risultati da 1 a 5 su 5

Discussione: cookies e date

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    21

    cookies e date

    Ciao a tutti!
    Ho realizzato un sistemino per votare che utilizza i cookie per evitare che lo stesso visitatore voti + di una volta al giorno...ma ho dei problemi. Il mio codice è questo:

    codice:
    'controlla la data dell'ultimo voto dato
    Dim dataPrecedenteVoto
    dataPrecedenteVoto = request.cookies("dataUltimoVoto")
    
    'chiede al server la data odierna
    Dim dataOdierna
    dataOdierna = Date()
    
    'se le due date sono uguali non fa votare altrimenti sì
    if dataPrecedenteVoto = dataOdierna then
    response.write("Hai già votato")
    else
    
    'cattura la preferenza del visitatore
    Dim scelta
    scelta = request.queryString("preferenza")
    
    'crea un nuovo oggetto connessione e la apre
    Dim oc
    Set oc = Server.CreateObject("ADODB.Connection")
    oc.Open ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" + server.MapPath("candidati.mdb"))
    		
    
    'crea un nuovo oggetto recorset e una nuova query sql per selezionare il record in cui il codice corrisponde a quello del candidato cliccata
    Dim ors1
    Set ors1 = server.createObject("ADODB.recordset")
    			
    Dim sql1
    sql1 = "SELECT nVoti FROM candidati WHERE codice = '" & scelta & "'"
    			
    ors1.open sql1, oc
    			
    'assegna alla variabile votiAccumulati il valore di voti presente
    Dim votiAccumulati
    votiAccumulati = ors1("nVoti")
    
    'incrementa di uno il nVoti
    votiAccumulati = votiAccumulati + 1
    			
    'crea un oggetto command per l'aggiornamento
    Dim ocm
    Set ocm = server.createObject("ADODB.command")
    			
    'crea una query per l'aggiornamento
    Dim sql2
    sql2 = "UPDATE candidati SET nVoti = '" & votiAccumulati & "' WHERE codice = '" & scelta & "'"
    
    
    'esegue l'aggiornamento
    ocm.activeConnection = oc
    ocm.commandText = sql2
    ocm.commandType = adCmdText
    ocm.execute
    
    'scrive un cookie
    response.cookies("dataUltimoVoto") = Date()
    response.cookies("dataUltimoVoto").expires = Date() + 30
    			
    
    'chiude il recordset e libera la memoria
    ors1.close
    Set ors1 = nothing
    			
    'chiude la connessione e libera la memoria
    oc.close
    Set oc = nothing
    			
    response.write("Grazie per aver votato")
    
    end if
    Il problema è che se metto la data come valore del cookie, il blocco dell'utente che ha già votato non funziona, mentre funziona se metto come valore del cookie una qualsiasi stringa di caratteri...il fatto è che io ho bisogno di far votare l'utente non una volta ogni 24 ore, ma realmente una volta al giorno: in altre parole se voto ggi alle 16, alle 00.01 di domani dovrei poter rivotare.
    Qualcuno sa dirmi dove ho sbagliato e come posso fare?
    Grazie!

  2. #2
    codice:
    'controlla la data dell'ultimo voto dato
    Dim dataPrecedenteVoto
    if request.cookies("myCookies").hasKeys then
    dataPrecedenteVoto = request.cookies("myCookies")("dataUltimoVoto")
    else
    dataPrecedenteVoto = dateAdd("d",-1,Date())
    end if
    'chiede al server la data odierna
    Dim dataOdierna
    dataOdierna = Date()
    
    'se le due date sono uguali non fa votare altrimenti sì
    if cDate(dataPrecedenteVoto) = cDate(dataOdierna) then
    response.write("Hai già votato")
    else
    
    'cattura la preferenza del visitatore
    Dim scelta
    scelta = request.queryString("preferenza")
    
    'crea un nuovo oggetto connessione e la apre
    Dim oc
    Set oc = Server.CreateObject("ADODB.Connection")
    oc.Open ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" + server.MapPath("candidati.mdb"))
    		
    
    'crea un nuovo oggetto recorset e una nuova query sql per selezionare il record in cui il codice corrisponde a quello del candidato cliccata
    Dim ors1
    Set ors1 = server.createObject("ADODB.recordset")
    			
    Dim sql1
    sql1 = "SELECT nVoti FROM candidati WHERE codice = '" & scelta & "'"
    			
    ors1.open sql1, oc
    			
    'assegna alla variabile votiAccumulati il valore di voti presente
    Dim votiAccumulati
    votiAccumulati = ors1("nVoti")
    
    'incrementa di uno il nVoti
    votiAccumulati = votiAccumulati + 1
    			
    'crea un oggetto command per l'aggiornamento
    Dim ocm
    Set ocm = server.createObject("ADODB.command")
    			
    'crea una query per l'aggiornamento
    Dim sql2
    sql2 = "UPDATE candidati SET nVoti = '" & votiAccumulati & "' WHERE codice = '" & scelta & "'"
    
    
    'esegue l'aggiornamento
    ocm.activeConnection = oc
    ocm.commandText = sql2
    ocm.commandType = adCmdText
    ocm.execute
    
    'scrive un cookie
    response.cookies("myCookies")("dataUltimoVoto") = Date()
    response.cookies("myCookies").expires = dateAdd("d",30,Date())
    			
    
    'chiude il recordset e libera la memoria
    ors1.close
    Set ors1 = nothing
    			
    'chiude la connessione e libera la memoria
    oc.close
    Set oc = nothing
    			
    response.write("Grazie per aver votato")
    
    end if

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    21
    Grazie mille...lo provo subito!

  4. #4
    Io farei anche un controllo degli IP, altrimenti basta poco per aggirare il blocco e dare centinaia di voti in pochissimi minuti

    Se i votanti non sono decine di migliaia al giorno si possono memorizzare gli IP in una stringa memorizzata in application

    codice:
    <%
    bOK=false
    IPuser=request.servervariables("REMOTE_ADDR")
    iToday=day(now())
    if application("VotesLastDay")=iToday then
       VotesIpaddress=application("VotesIpaddress")
       if instr(VotesIpaddress,","&IPuser&",")=0 then
          application("VotesIpaddress")=VotesIpaddress&IPuser&","
          bOK=true
       end if
    else
       application("VotesLastDay")=iToday
       application("VotesIpaddress")=","&IPuser&","
       bOK=true
    end if
    if (bOK=true) then
       ' FAI AGGIORNAMENTO
    else
       ' mostra a video errore
    end if

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    21
    Grazie a tutti e due...ho provato il codice di Mems e funziona .
    Se hai tempo e voglia potresti però spiegarmi cosa succede quando
    codice:
    if request.cookies("myCookies").hasKeys then
    dataPrecedenteVoto = request.cookies("myCookies")("dataUltimoVoto")
    else
    dataPrecedenteVoto = dateAdd("d",-1,Date())
    end if
    e
    codice:
    if cDate(dataPrecedenteVoto) = cDate(dataOdierna)then
    ...
    else
    ...
    e
    codice:
    response.cookies("myCookies").expires = dateAdd("d",30,Date())
    Scusa, è che è da poco che ho a che fare con asp.

    Grazie anche a dizionario...provo a mettere in pratica!

    Ciao!

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.