30. marts 2011 - 16:51Der er
9 kommentarer og 2 løsninger
login system
hej, igen, jeg stilte et par spørgsmål sidste gang omkring mysql ph osv.
gruden til det, var at jeg selv vil lave mit eget login system )jeg vil helst ikke have for mange input omkring login systemet, da jeg mener at, man virkelig lære vidlt meget, hvis man selv leger og fejler ved at prøve, at lave login systemet selv, selvfølgelig med en del hjælp fra eksperten.dk (ja, tak for hjælpen sidste gang) plus en del tutorials fra nettet). nu er jeg næsten færdig med login systemet, og holdt da kæft hvor det virker, jubii.
Min spørgsmål er følgende, herunder.
1. Hvordan skal mit login system, eller bare et login system bygges op, diagram hirakisk ?.
jeg har opbygget det sådan her, herunder.
login.html
logintjek.php
opretbruger.php
aktive`r ny bruger ved hjælp af email aktivering / link
aktiverbruger.php
glemtbrugernavn.php
memberspage.php
logout.php
slut.
sådan har jeg altså opbygget mit login system, men jeg har ikke lavet en change username, skal man lave det sådan, at når først bruger er logget in, kan ha/hun altid ændre brugernavn ?, eller skal man bare lave et link på selve login.hmtl siden, uden at bruger har logget ind ?.
2. hvis en bruger sletter /ressetter sit brugernavn/password, opstår der en ulighed i idèrne og deres felter, eks, herunder.
id 1=lena hansen id 2=henrik holmen id 7=jørgen larsen.
hvordan kan jeg sørge for at idèt ikke hopper et antal tal over, skal jeg bruge en delete form med desc order / decrement lign ting ?.
3. jeg kan ikke finde ud af hvordan man laver et "remember me" knap på login siden, giv et nemt eks.
4. hvad med min email aktivering som jeg har lavet til mit login system, skal jeg lave en begrænsning på 24 hours, hvor bruger har 24 timer til at registrere sig, ellers bliver han`s brugernavn osv slettet, hvordan skal jeg gøre det (jeg har oprette en curdate i mysql insert, men hvordan tjekker man egentligt, om der er gået en dag/24 timer efter at bruger har registreret sig ?.
5. jeg vil gerne lave en ekstra "acess level" sikkerhed i memberspage.php, jeg tjekker kun om bruger`s session variabel brugernavn og password, og om at han kommer fra login, er det nok, eller skal jeg tjekke både password og brugernavn i mysql databasen (som jeg gør det i login.php) ?.
6 sidst spørgsmål (beklager de mange spørgsmål), men jeg vil gerne lave et memberspage med brugerne indhold (har fundet ud af det), men ikke om man kan gemme billeder i mysql databasen, så den enkelt bruger kan downloade billeder fra memberspage (hver bruger har hvert deres billeder), hvoedan skal det gøres ?. kam jeg bruge blobs felter med billed arrays, eller skal jeg bruge en folder på serveren til hver bruger der automatisk bruger lavet når bruger registrere sig ?. hver enkelte folder skal være password protected.
ps. alt det andet med css, php preg_match validering med email og brugernavn har je fundet ud af (det var ret svært), også admin brugerside.
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Du spørger en del gange om, hvordan man "skal" lave det. Husk på, at der ikke er en bestemt måde du skal gøre tingene på. Den måde du har gjort det på nu er der sikkert ikke noget galt med, hvis det passer til behovet.
Derfor til 1:
Det ser fint ud. (Ud fra de oplysninger som du giver)
2:
Hvorfor er det et problem, at der bliver "huller" i id'erne? Det skulle ikke have nogen betydning.
3:
Du kan kigge på cookies. Jeg går ud fra, at du lige nu bruger sessions. Sessions bliver slettet, når brugeren lukker browseren ned. Med cookies bliver en lille fil gemt på brugeres egen pc. Den fil er der også næste gang brugeren besøger hjemmesiden. På den måde kan systemet finde ud af, hvem brugeren er. Så prøv at søge på "cookies php".
4:
Det kan du godt lave, men det er ikke strengt nødvendigt til at starte med. Sådan en funktion kan du jo kigge på, når du er helt færdig i min mening.
5:
Altså du behøver jo kun at tjekke med databasen, når brugeren er logget ind. Her skal du både tjekke brugernavn og password. Hvis der findes en bruger med det angivne password, så opretter du en session med brugernavn. Her er der ingen grund til at gemme password. Dette har du jo tjekket for. Så hvis denne session med brugernavn findes, så ved du at brugeren er logget ind.
6:
Du skal ikke gemme billeder direkte i databasen. Lav en uploadform, hvor billederne bliver gemt i en folder, mens linket til billedet bliver gemt i databasen.
tak for svarene, ok det er lidt for vildt at tjekke så meget i memberspage, de er fodi, jeg er bange for hacker angreb (ja, jeg har ikke endnu brugt stripstags, mysql injection md5), fordi jeg jo skal være færdig meget login systemet, så det virker 100%, det er jo ikke uploadet til en rigtig server, det llgger på min xampp server lokalt.
jeg har fået at vide, at man også skal bruge javascript validering, samtidig med php validation, fordi nogle påstår, at hvis serveren fejler, kan java script validering overtage?? (altså validering til hrml input formen, for nettop at undgå at folk putter alt skidt ind i min elskede mysql database!). ja, så bliver man jo aldrig færdig, det gider jeg ikke. med hensyn til session, har jeg fået at vide at "det er bedst at bruge session variaabler eks, $_SESSION['$brugernavn'] = $brugernavn;", fordi mine sessioner og dem brugerne logger ind med (ja det er jo ingen bruger endnu!) ligger på min pc / xampp server (jeg har konfigureret php.ini til at gemme mine sessioner på min harddisk eks, c:\minesessioner ), dvs. at sessionerne IKKE BLIVER GEMT PÅ BRUGERNES PC, MEN PÅ SELVE SERVEREN, og det er lidt omvendt med cookies, så vidt jeg forstår, kan en bruger altid slette sine cookies på sin computer, men så sandelig ikke på serveren selv, med mindre man bruger session_destroy!?, æhh om mine sessioner bliver slette, når jeg afslutter browseren, jeg har ikke set noget endnu, MEN JEG INDRØMMER AT SESSION bregrebet er ret forvirrende at forstå!.
ups, jeg har glemt at bruge php_self på login sidern og putte selve validatering på selve html input formen (som bliver forandret til login.php!),validering bliver udført på eks, login tjek.php, ok men det er jo små bagteller.
og til spam / email, syntes jeg det er for besværeligt med regulære udtryk med preg_match, istedet vil jeg bruge det gratis og professionelle Capta system, tror nok det hedder, og det er vist nok gratis og nemt at bruge!.
Det er noget vrøvl at PHP-valideringen nogle gange fejler. Hvis en fejler er det din kode, der har fejl.
Det er fint at bruge javascript validering også alligevel. Men ikke med det argument at PHP-valideringen kan fejle. Du skal derimod bruge javascript-validering, da det sker direkte på siden inden brugeren forlader den. Derved kan du lave validering mens brugeren skriver, så brugeren selv kan se, hvis noget er forkert med det samme.
Sessions bliver slettet, når brugeren forlader siden. Derfor kan siden ikke huske en bruger, hvis du bruger sessions. Og ja sessions bliver gemt på serveren.
Brugeren kan godt slette en cookie fra computeren, men det gør jo ikke noget. Den bruger der sletter sin cookie vil så ikke blive husket næste gang, så han må logge på igen. Men får alle de bruger der ikke sletter cookies (Stort set alle), vil det virke.
unskyld, hvis jeg roder rundt i det, ja selvfølglig virker javascript og php validering. jeg har rodet lidt med javascript men, det er ikke min stærke side, måske kan jeg få dreamweaver til at validere / lave min valideringskode ?. (har fundet nogle tutorials!). tilbage til dine svar angående javascript og sessioner, SKAL JEG HAVE BÅDE JAVASCRIPT OG PHP VALIDERING SAMTIDIGT ?, OG SKAL JEG BRUGE COOKIES (GUD SKE LOVE, VED JEG HVORDAN MAN GØR . SET COOKIES OG SESSION_START, SÅ DET ER RMELIGT NEMT.). nu er jeg stolt over at jeg selv har lavet mit eget login system og er ved at blvie godt til det der php osv, men nu har jeg desværre fundet ud af der er en mega fejl (ja jeg er lidt knust, jeg bliver hidsig bår skidtet ikke virker!), det er koden til test af, om en anden bruger har taget samme brugernavn, koden virker ok, men det virker pludselig ikke, når den skal teste om der er en bruger der har registreret med nrugernavn og password og email, alle felter fra brugerreg.hmtl sakl jo testes samtidig, det viker ikke, især ikke npår jeg selv for sjovt opretter en eksisterende bruger i forvejen, eks ,hvis der findes en bruger med navn jens hansen, password = 12345678, email =jenshansen@yahoo.dk, og jeg opretter en bruger med samme data men istedet for password=123456789 , ædnre jeg passwordet til en anden hvilket som helst iforvejen registreret bruger, så registrere php koden alligevel deb nye bruger, det går jo ikke hvis der 2 bruger med samme email, eller password/brugernavn. her er koden til test af "allerede registrert bruger". herunder.
$result=mysql_query("SELECT brugernavn,password,email FROM bruger WHERE brugernavn = '.$brugernavn1.' AND password = '.$password1.' AND email = '.$email1.'");
$count=mysql_num_rows($result);
if($count>=0)
{
echo "bruger eller password / email er allerede optaget!, vælg et andet!";
exit; slut på kode,
og til at tjekke om bruger logget ind på memberspage bruge jeg koden herudner.
if(!$_SESSION['loget_in'] == 1)// hvis ikke bruger er logget, sendt ham til login.html {
" SKAL JEG HAVE BÅDE JAVASCRIPT OG PHP VALIDERING SAMTIDIGT "
Det bestemmer du jo selv. PHP er det vigtigste med hensyn til sikkerhed, da en bruger bare kan slå javascript fra. Så under alle omstændigheder bør du have validering i PHP.
Med hensyn til Javascript validering kan du gøre det for at øge brugervenligheden. Har du ikke lagt mærke til at på nogen registreringssider kan du som bruger med det samme se om dit input er valid data. F.eks. ved at boksen bliver grøn eller der kommer et rettetegn ud for inputfeltet. Omvendt hvis du skriver noget forkert under f.eks. email, så bliver feltet rødt eller der kommer et rødt kryds. Dette er lavet med javascript, og det er til primært for brugeren skyld. Det er ikke strengt nødvendigt, da man allerede validere i PHP, men det er mere brugervenligt. Om du skal have det med er helt op til dig.
" OG SKAL JEG BRUGE COOKIES (GUD SKE LOVE, VED JEG HVORDAN MAN GØR . SET COOKIES OG SESSION_START, SÅ DET ER RMELIGT NEMT."
Igen er det op til dig. Men du sagde i starten, at du ville have en funktion, så systemet kunne huske en bruger, når brugeren besøger hjemmesiden igen. Derfor nævner jeg cookies. Sådan en funktion laves med cookies.
PROBLEM MED SAMME BRUGERNAVN
Problemet ligger i den måde du tjekker på i din SQL. Du tjekker jo om der findes en bruger med identisk brugernavn, email og password.
Der er faktisk 2 problemer i dette.
For det første skal du slet ikke tjekke om et identisk password findes i forvejen. Der er ikke noget problem i at to personer har samme password. Der er faktisk et stort problem i at du tjekker for det. For hvis brugeren får en tilbagemelding om, at sådan et password allerede findes i databasen, så kan han muligvis prøve sig frem med brugernavne og hacke en bruger. Han ved jo at én person har passwordet, så hvis du ikke har så mange brugere, så finder han hurtigt ud af hvem.
For det andet så tjekker du for om informationerne er identiske på alle tre felter. Du skal kun tjekke én af gangen. Tjek derfor for brugernavn alene:
$result=mysql_query("SELECT brugernavn,password,email FROM bruger WHERE brugernavn = '.$brugernavn1.' ");
Hvis brugernavnet findes, så kører du ikke resten af oprettelsen. Hvis brugeren ikke findes i forvejen, så kører du videre. Inde i if-sætningen kan du så tjekke for email, hvis du vil det eller du kan lave en boolean variabel og gøre den falsk, hvis noget er i vejen (Så slipper du for alle de if-sætninger). Helt til sidst bliver brugeren så kun oprettet hvis variablen er sand.
ok, rigtig mange tak emfr08ab. jeg tor jeg forstår, hvad du mener, med hensyn til test af bruger er oprettet i forvejen,. jeg så noget lign , andre steder på nettet, men havde ikke fanget budskabet rigtig, før endnu. så faktisk skal jeg bare bruge en test kode, der tester om brugernavn og email er allerde optaget, nettop først ved at tjekke for brugernavn, og inde i if sætningen teste for email, og hvis email ekssistere så bruger jeg exit;, ellers bruger jeg else { mysql_query("INSERT INTO bruger (brugernavn,password,email,random) VALUES ('$brugernavn1','$password1','$email1','$tal')");.
vedr. validering bruger jeg altså javascript (de tutorials jeg så på nettet var rimelig nemme at forstå).
og ja, cookies kommer også med.
sikke en tid det tsger at lave sådan et login system, men der er ok. nu må jeg hellere lade være med at spørge for meget her i experten.dk, andre skal jo også til.
og da mysql databasen ligger felterne relaterende assotivt til hihanden, eller hvad man nu kalder det, sker der ingen ting med en eller 2 bruger har samme password!.
i login har jeg ingen problemer for, der tjekkkes der for både om passowrd og brugernavn er rigtig (om de findes i databasen) ellers bliver bruger ikke logget ind. eks.
$result=mysql_query("SELECT id FROM bruger WHERE brugernavn='$brugernavn1' AND password='$password1' AND aktiveret='1'");
fantastisk det virker, nu tjekker jeg kun brugernavn og email, alt virker (indrømmer, har været ret meget frustreret over dette problem med tjekning af oprettelse af iforvejne bruger, men sådan er nogle gange med porgrasmmering.
med echo, tilbage melder jeg kun at enten email eller brugernavn er optaget, så en hacker ikke kan aflure password osv.
unskyld igen, jeg har brugt denne kode til tjek af bruger allrede oprettet!, herunder.
$result=mysql_query("SELECT id FROM bruger WHERE brugernavn='$brugernavn1'");
$count=mysql_num_rows($result); if($count==1) {
echo "bruger eller email er allerede optaget!, vælg et andet!";
$result2=mysql_query("SELECT id FROM bruger WHERE email='$email1'");
$count2=mysql_num_rows($result2); if($count2==1)
{
echo "email er allerede optaget!, vælg et andet!";
}
exit;
}
else // her udføret oprettelse af bruger.
ps. echo og teksten i echo fejl meddelserne er lidt sjusket, mnen det gør ikke noget, retter det senere.
Synes godt om
Ny brugerNybegynder
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.