17. juli 2003 - 13:02Der er
20 kommentarer og 2 løsninger
Hjælp til check af cookie - autologin
Jeg har nu læst div. svar ang. cookies, kogt et script sammen, jeg har ikke prøvet det endnu, da jeg vil være sikker på om jeg har fat i noget af de rigtige. Jeg er specielt usikker på min MD5 Kryptering.
<input type="checkbox" name="auto" value="ON"> //Jeg sætter en autologin option i min login form
***
$encryptpass = md5($pwd);
if($auto == "ON") // Hvis flueben laves der en cookie { setcookie ("cookieuser","$user", time()+365*10); setcookie ("cookiepass","$encryptpass", time()+365*10); }
if ($_COOKIE['cookieuser']) { // tjek om der findes en cookie {
$check_cookie = explode("|",$_COOKIE['cookieuser']); $user = $check_cookie[0]; $encryptet_pass = $check_cookie[1]; //har gemt password i MySQL, både som klartekst og MD5
$query = mysql_query("SELECT encryptet_pass, username FROM users WHERE user=$user;"); while ($row = mysql_fetch_array($query)){ // Vi laver et gennemløb af tabellen i MySQL for match af cookie if $row[encryptet_pass] == $_COOKIE['$encryptet_pass']){
$_SESSION['username'] = $row['username']; // Hvis det er tilfældet registrer vi en session session_register("username"); session_register("pass"); } }
AI bliver først for alvor en del af arbejdet, når teknologien integreres i den måde, vi arbejder på. At have adgang til AI betyder ikke nødvendigvis, at medarbejderne er klar til at bruge den.
du mangler bla. session_start() øverst i scriptet og så vil jeg sige at det nok er 'pænere' kode at anvende $_POST vars istedet for at tro på at sitet altid vil ligge på et webhotel hvor register_globals er slået til ;-)
det vil sige at du tilgår vars sendt fra formularer på denne måde:
$_POST['auto'] == "ON"
men der vil det iøvrigt være sådan at $_POST['auto'] ikke er initialiseret da manglende flueben bevirker at variablen ikke er tilgængelig. Så den korrekte test vil være:
if(isset($_POST['auto'])){ }
derudover har du lidt problemer med paranteser omkring et par if-sætninger og jeg kan jo ikke tjekke om dit db kald er ok.
Desuden finder jeg det lidt mærkeligt at registrere kodeordet i en session. Sessions sendes ukrypteret over nettet og sådan noget....og jeg kan ikke se hvad gavn brugeren har af det?
Det var lige mine umiddelbare kommentarer /raz
Men prøv dog scriptet af også og debug fejl derefter...
Nu har jeg rettet lidt op på det, ser det bedre ud nu?????
<input type="checkbox" name="auto" value="ON"> //Jeg sætter en autologin option i min login form
***
$encryptpass = md5($pwd);
if($auto == "ON") // Hvis flueben laves der en cookie { setcookie ("cookieuser","$user", time()+365*10); setcookie ("cookiepass","$encryptpass", time()+365*10); }
if ($_COOKIE['cookieuser']) { // tjek om der findes en cookie {
$check_cookie = explode("|",$_COOKIE['cookieuser']); $user = $check_cookie[0]; $encryptet_pass = $check_cookie[1]; //har gemt password i MySQL, både som klartekst og MD5
$query = mysql_query("SELECT encryptet_pass, username FROM users WHERE user=$user;"); while ($row = mysql_fetch_array($query)){ // Vi laver et gennemløb af tabellen i MySQL for match af cookie if $row[encryptet_pass] == $_COOKIE['$encryptet_pass']){
$_SESSION['username'] = $row['username']; // Hvis det er tilfældet registrer vi en session session_register("username"); } }
Det er det vel til en hvis grad... så kan du jo fyre det op imod databasen, og hvis de så er ens, er der da god sandsynlighed for det er den korrekte bruger...
fint fint! jeg afprøver det i aften - hvis i finder andre forbedringer er i velkommen til at komme med flere indlæg. I må også godt komme med svar istedet for kommentar til points fordeling.
men jeg kan ikke se hvorfor du behøver alt det explode-fis ;-)
du kan vel bare gøre: if(isset($_COOKIE['cookieuser']){ $query = mysql_query("SELECT username FROM users WHERE user=$_COOKIE['cookieuser'] AND encryptet_pass=$_COOKIE['cookiepass']");
1) Folk logger på med username og password klar tekst! 2) Jeg gemmer password i MySQL i både klartekst og MD5 3) Username og MD5 password gemmes i en Cookie lokalt.
Jeg checker cookie MD5 password op imod det MD5 password som ligger i MySQL, er det forkert? eller er der en nemmere måde at gøre det på?
$query = mysql_query("SELECT encryptet_pass, username FROM users WHERE user=$user;"); while ($row = mysql_fetch_array($query)) { if md5($row[pass]) == $_COOKIE['$encryptet_pass'])
Nu skulle den kun køre med krypteret, password skrives i cookie med MD5, Bruger logger på og cookie MD5 password samenlignes med MD5 password i Sql databasen, herved vil password som sendes over internettet altid være MD5 krypteret.
Jeg kan nu køre scriptet men får bare en blank side????
1. du blander to måder at tilgå formvariable sammen idet du både bruger $_POST[] samt $user, $password osv. Brug samme måde at tilgå variabler på gennem hele scriptet ellers får du måske problemer på et tidspunkt
2. min pointe med at lave denne query: SELECT username FROM users WHERE user=$_COOKIE['cookieuser'] AND encryptet_pass=$_COOKIE['cookiepass'] var at du så vel bare kan teste for om der er et resultat sæt svarende til 1 . Så verificere du allerede der om indtastede brugernavn svare til passwd i db.
men det er da fint at det virker...
3. du burde vel også tjekke om brugeren overhovedet har indtastet noget i felterne og give relevante fejlmeddelelser ?
// Findes der en cookie if ($_COOKIE['cookiepass']) {
// check om brugeren kan validers i MySQL users databasen $sql = mysql_query("SELECT * FROM users WHERE username='$_COOKIE['cookieuser'] ' AND password='$_COOKIE['cookiepass'] ' AND activated='1'");
// Findes der en cookie if ($_COOKIE['cookiepass']) {
// check om brugeren kan validers i MySQL users databasen $sql = mysql_query("SELECT * FROM users WHERE username='$_COOKIE['cookieuser'] ' AND password='$_COOKIE['cookiepass'] ' AND activated='1'");
// kør member menu include("login_success.php"); } } else { echo "Ugyldig brugernavn eller password - prøv igen!<br>"; include("login.html"); } }
hvad sker der iøvrigt hvis brugeren IKKE vil huskes ? ;-) Svaret på det er, såvidt jeg kan se, at brugeren ikke bliver valideret...da der så ikke er sat en cookie. Brugeren kommer derfor ikke ind if(isset($_POST['auto']) testen /raz
rzj> Jeg kan ikke se at du har ændret i scriptet? hvis brugeren ikke vil huskes, har jeg lavet et script til session som kommer efter cookie scriptet her.
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.