Avatar billede sapworld Nybegynder
23. september 2004 - 05:17 Der er 16 kommentarer og
2 løsninger

Generere tilfældig tal til Access database

Hej
Jeg har en side hvor medlemmer kan logge på og vedligeholde deres egne data. Som det virker i dag, hiver jeg deres email med over fra deres logon, til at hente deres data, hvilket gør at denne kan ses i URL'en. Hvis nu en snedig bruger kender en af de andres Email's, så er det bare at sætte denne ind i URL'en, og vedkommende kan så ændre dennes data - surt.
ID'et fra data baesn er endnu værre, for det er det bare at lægger +1 til for at få fat i en anden bruger.
Kan man når folk registrerer sig få genereret en unik nøgle. f.eks. ud fra dato og tid, som så gemmes i et felt i databasen lavet til formålet(sandsynligheden for at 2 registrerer sig samtidig er lig nul)??? Eller er der en anden løsning?

/Kim
Avatar billede arne_v Ekspert
23. september 2004 - 08:03 #1
Er det ikke en session ID du spørger efter ??
Avatar billede arne_v Ekspert
23. september 2004 - 08:04 #2
Session.SessionID

(jeg formoder at ASP bruger en god algoritme til session ID)
Avatar billede arne_v Ekspert
23. september 2004 - 08:07 #3
Men hvis du har specielle behov som f.eks. at det skal være samme fra gang
til gang, så er metoderne velekendte.

Lav et antal tilfældige bytes. Eksempel: IP adresse konkataneret med
tidspunkt konkataneret med et tilfældigt tal.

Udregn en hash. F.eks. MD5.

Konverter til hex.
Avatar billede arne_v Ekspert
23. september 2004 - 08:09 #4
(MD5 hash har 2^128 muligheder og en rimelig pæn fordeling)
Avatar billede fennec Nybegynder
23. september 2004 - 08:13 #5
Jeg vil helt klart fortrække at bruge session. Du gemmer bare deres email/id i en sessionvariabel når de logger på, også er de knyttet til den browser/session. Du kan så kalde sessionvariablerne fra alle dine ASP sider.

session("BrugerID") = rs("ID")
session("BrugerEmail") = rs("Email")
Avatar billede sapworld Nybegynder
23. september 2004 - 08:23 #6
Hej
Det må være en session jeg har brug for. Jer ikke en asp haj, så jeg har brug for lidt yderligere forklareing. Jeg sender mail'en til næste side med denne logon kode:

<%
SET RS = Server.CreateObject("ADODB.Connection")
rs.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../../DB/database.mdb")

If Request("mode") = "Check" then

Function unQuote(strTekst)
  strTekst = Trim(strTekst)
  unQuote = Replace(strTekst,"%","53")
End Function

    ' Gemmer formfelterne i Variabler
        strUsername = unQuote(request("username"))
        strPassword = unQuote(request("password"))

  Sql = "Select Count(*) as Found from user where (username = '" & strUsername  & "') and (password ='" & strPassword  & "')"
  Set LO = RS.Execute(Sql)
  if LO("Found") = 0 then
    Session("login") = ""
    error = "Du blev ikke godkendt af systemet"
  else
  strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../../DB/database.mdb")
  Set myConn = Server.CreateObject("ADODB.Connection")
  myConn.Open strDSN
  strSQL = "SELECT * FROM user where (username = '" & Request("username") & "') and (password ='" & Request("password") & "')"
  Set ez = myConn.Execute(strSQL)
    Session("login") = "yes mate"
    Response.Redirect "result.asp?username=" & request.form("username")
    EZ.Close
    RS.Close
    Conn.Close
  end if
end if
%>

Kan en af jer hjælpe mig med at rette koden til samt fortælle hvordan jeg henter koden på den side brugeren sendes til?

/Kim
Avatar billede eagleeye Praktikant
23. september 2004 - 08:34 #7
Hvis det er ID du vil havde random kan du i Access gøre flere ting, her er to forskellige muligheder:

1. Lav din autonummer kolonne om fra Increment til Random Tal.

2. Lav dit autonummer fra LongInt til "Replication ID". Bemærk man kan ikke lave kolonne fra "Replication ID" til LongInt igen.

Så huske at lave en kopi af databasen filen inden du roder med det :)

Men det du gør er at lave denne linje:
Response.Redirect "result.asp?username=" & request.form("username")

om så den sender id'et på personen i stedet for naavnet/emailen:
Response.Redirect "result.asp?username=" & ez("id")
Avatar billede fennec Nybegynder
23. september 2004 - 09:08 #8
Set ez = myConn.Execute(strSQL)
    Session("login") = "yes mate"
    Session("UserID") = ez("ID")
    Session("email") = ez("email")
    session("UserName") = ez("username")
    Response.Redirect "result.asp

f.eks bruger du så session("UserName") i stedet for request.querystring("username") på result.asp siden.
Avatar billede sapworld Nybegynder
23. september 2004 - 09:59 #9
Hmm, nu er jeg i tvivl. Hvilken løsning vil være den mest normale og sikreste at lave?
Eagleeye: Virker fint. Af dine forslag er jeg mest til løsning 2 da løsning 1 genererer et negativt tal. Jeg er ikke klar over om det kan give problemer senere hen med et negativt tal.
Fennec: virker fint.
/Kim
Avatar billede fennec Nybegynder
23. september 2004 - 10:15 #10
For mig (og vil tro, de fleste andre) er session det mest normale at bruge til login systemer af denne type.

Session er også rimlig sikker. Det eneste problem er at session, pr default, eksistere i 20 min (For hver gang man ændre siden tæller den forfra). Det vil sige at hvis en bruger forlader computeren uden at logge af eller lukke browseren ned, lever session stadig, og man kan gå tilbage og få adgang til hans/hendes info. Der findes dog måder til at minimere dette problem.
Avatar billede eagleeye Praktikant
23. september 2004 - 10:43 #11
sapworld >> Vil du skire folk ikke kan se andre bruger profiler ved at pille ved ID'et skal du bruges session variablen til at gemme ID'et i.
Du kan så overveje om folks ID skal være et autonummer tal som stiger med 1 for hver ny bruger du får, eller om det skal være et tilfældigt tal.

Så hvis spørgsmålet går ud på at undgå folk kan se andres profil skal man ikke burge querystring men sessions.
Avatar billede sapworld Nybegynder
23. september 2004 - 11:16 #12
Det er ikke NASA, men det er en foreningshomepage. Derfor skal der ikke tages højde for at folk forlader deres PC, og der derved kan ske misbrug. Jeg vil undgå drengestreger, da de unge knægte er rimelige kvikke i dag. Da jeg har folks Email adresser vil jeg være sikker på at disse ikke kan misbruges. Der logges på med en email adresse, og jeg har prøvet at hente en persons data med denne streng:
sql = "SELECT * FROM adresse WHERE email = " & session("username") & ""
Men det kan den ikke lide: Syntax error (missing operator) in query expression

Hvad gør jeg galt?

/Kim
Avatar billede fennec Nybegynder
23. september 2004 - 11:29 #13
for det første er email i tabellen sikkert tekst, så der skal ' omkring.

sql = "SELECT * FROM adresse WHERE email = '" & session("username") & "'"

desuden ser det ud til at session("username") er tom. Det skulle vel ikke være session("email")  i stedet???
Avatar billede sapworld Nybegynder
23. september 2004 - 11:40 #14
Det hjalp. Username er ikke tomt, men jeg ville ikke post min email her pga. fuck... spam :)
Måske et dumt spørgsmål, men hvor gemmer "den" de sessions værdier? Har jeg dem hele tiden til rådighed, så længe browseren ikke har væet passiv i 20 min, eller skal de flyttes mellem siderne???
I den endelige løsning har jeg også ændret ID'et som eagleeye forslog, så vil denne point fordeling være fair:
eagleeye:10
fennec: 20
Poster i et svar?

/kim
Avatar billede sapworld Nybegynder
23. september 2004 - 11:59 #15
Hmmmm det har åbnet nye spørgsmål om kring sikkerhed, men det vil være mest fair at lave et nyt sp., så det gør jeg
/Kim
Avatar billede eagleeye Praktikant
23. september 2004 - 12:58 #16
Helt fint med mig, her et svar :)

Session værdier gemmes på serveren samme med SessionID. SessionID sendes til browseren som en session-cookie og når browseren tilgår serveren igen kan severen bruge det sessionID til at finde den rigtige session varaible.
Avatar billede fennec Nybegynder
23. september 2004 - 13:05 #17
.o) <-- One Eyed Jack
Avatar billede sapworld Nybegynder
23. september 2004 - 13:24 #18
Tak for hjælpen .)

/Kim
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester