Avatar billede danic Nybegynder
17. juli 2003 - 13:02 Der 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");
    }
}
Avatar billede rzj Nybegynder
17. juli 2003 - 13:11 #1
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...
Avatar billede danic Nybegynder
17. juli 2003 - 13:21 #2
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");
    }
}
Avatar billede danic Nybegynder
17. juli 2003 - 13:22 #3
Ups! det var den forkerte prøver lige igen!

session_start()
encryptpass = md5($pwd);

if(isset($_POST['auto'])){

  setcookie ("cookieuser","$user", time()+365*10);
  setcookie ("cookiepass","$encryptpass", time()+365*10);
}


if ($_COOKIE['cookieuser'])
{
    $check_cookie = explode("|",$_COOKIE['cookieuser']);
    $user = $check_cookie[0];
    $encryptet_pass = $check_cookie[1];

    $query = mysql_query("SELECT encryptet_pass, username FROM users WHERE user=$user;");
        while ($row = mysql_fetch_array($query))
        {
            if $row[encryptet_pass] == $_COOKIE['$encryptet_pass'])
        {
            $_SESSION['username'] = $row['username'];
        session_register("username");
        session_register("pass");
        }
        }
}
Avatar billede rzj Nybegynder
17. juli 2003 - 13:35 #4
hvad skal dette her gøre godt for:

$check_cookie = explode("|",$_COOKIE['cookieuser']);
    $user = $check_cookie[0];
    $encryptet_pass = $check_cookie[1];
Avatar billede danic Nybegynder
17. juli 2003 - 13:47 #5
Det var for at trække oplysninger ud af cookien og gemme dem som variabler, det er måske ikke nødvendigt?
Avatar billede exp Juniormester
17. juli 2003 - 13:50 #6
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...
Avatar billede danic Nybegynder
17. juli 2003 - 13:59 #7
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.
Avatar billede rzj Nybegynder
17. juli 2003 - 14:01 #8
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']");


osv

}
Avatar billede exp Juniormester
17. juli 2003 - 14:02 #9
Du skal jo alligevel ikke give point før det virker, vel...?!? *s*
Avatar billede danic Nybegynder
17. juli 2003 - 14:10 #10
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å?
Avatar billede hmortensen Nybegynder
17. juli 2003 - 14:12 #11
Enten kun ha det som md5 eller klar tekst...
Avatar billede exp Juniormester
17. juli 2003 - 14:13 #12
HVorfor har du det både som klartekst og md5?
Avatar billede hmortensen Nybegynder
17. juli 2003 - 14:14 #13
$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'])
Avatar billede danic Nybegynder
17. juli 2003 - 17:39 #14
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????

<?php
require("funktioner.php");
selectdb(sqlbasen);

session_start();

$encryptpass = md5($password);

if(isset($_POST['auto'])){

  setcookie ("cookieuser","$user", time()+365*10);
  setcookie ("cookiepass","$encryptpass", time()+365*10);
}
if ($_COOKIE['cookieuser'])
{
    $check_cookie = explode("|",$_COOKIE['cookieuser']);
    $user = $check_cookie[0];
    $encryptet_pass = $check_cookie[1];

    $query = mysql_query("SELECT decrypted_password, username FROM users where username='$user';");
        while ($row = mysql_fetch_array($query))
        {
           
            if ($row[decrypted_password] == $_COOKIE['$encryptet_pass'])         
            {
            $_SESSION['username'] = $row['username'];
            session_register("username");
            print"$row[decrypted_password]";
            print"$row[username]";
            }
        }
}
?>
Avatar billede danic Nybegynder
17. juli 2003 - 20:30 #15
Så har jeg fået det til at virke!!!! :(

<?php
require("../funktioner/mysql_funktioner.php");
aabn_forbindelse_og_vaelgdb(dvdbasen_dk);

session_start();



if(isset($_POST['auto'])){
 
  $encryptpass = md5($password);
  setcookie ("cookieuser","$username", time()+365*10);
  setcookie ("cookiepass","$encryptpass", time()+365*10);
}

if ($_COOKIE['cookiepass'])
{

    $check_cookie = explode("|",$_COOKIE['cookieuser']);
    $user = $check_cookie[0];
    $check_cookie = explode("|",$_COOKIE['cookiepass']);
    $encryptet_pass = $check_cookie[0];
 
    $query = mysql_query("SELECT password, username FROM users where username='$user';");
        while ($row = mysql_fetch_array($query))
        {
            echo"$row[password]";
            echo"<br>";
            echo"$encryptet_pass";
           
            if ($row[password] == $encryptet_pass)         
            {
            $_SESSION['username'] = $row['username'];
            session_register("username");
            print"SESSION MADE!!!!";

            }
        }
}


Kunne ikke gøre det uden jeres hjælp, svar = points :)
Avatar billede exp Juniormester
17. juli 2003 - 20:32 #16
Er ikke helt sikker på du mener mig, men så har jeg da lagt svaret :-)
Avatar billede rzj Nybegynder
18. juli 2003 - 09:41 #17
jeg vil da også lægge et svar...

men har flg. kommentarer:

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 ?

/raz
Avatar billede danic Nybegynder
18. juli 2003 - 12:23 #18
rzj> Jeg har prøvet at rette op på de 3 kommentar, ser det bedre ud nu??????
(tag dig ikke af at nogle variabler har skiftet navn undervejs)

<?
// Check om der er data i login form
if((!$username) || (!$password)){
    echo "Alle felter skal udfyldes! <br>";
    include 'login.html';
    exit();
}

// Hvis flueben sat i login form opret cookie1
if(isset($_POST['auto'])){
 
  $encryptpass = md5($password);
  setcookie ("cookieuser","$username", time()+365*10);
  setcookie ("cookiepass","$encryptpass", time()+365*10);
}


// 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'");

$login_check = mysql_num_rows($sql);
    if($login_check > 0)
    {
        while($row = mysql_fetch_array($sql))
        {
            foreach( $row AS $key => $val ){
            $$key = stripslashes( $val );
            }

            // Register session variables!
            $_SESSION['username'] = $row['username'];
            $_SESSION['email_address'] = $row['email_address'];
       
            // kør member menu         
                include("login_success.php");
        }
    }
    else {
        echo "Ugyldig brugernavn eller password - prøv igen!<br>";
        include("login.html");
        }
}
Avatar billede rzj Nybegynder
18. juli 2003 - 12:34 #19
efter min mening burde det se sådan ud:


<?
$username = $_POST['username'];
$password = $_POST['password'];

// Check om der er data i login form
if($username == "" || $password == ""){
    echo "Alle felter skal udfyldes! <br>";
    include 'login.html';
    exit();
}

// Hvis flueben sat i login form opret cookie1
if(isset($_POST['auto'])){
 
  $encryptpass = md5($password);
  setcookie ("cookieuser","$username", time()+365*10);
  setcookie ("cookiepass","$encryptpass", time()+365*10);
}


// 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'");

$login_check = mysql_num_rows($sql);
    if($login_check > 0)
    {
        while($row = mysql_fetch_array($sql))
        {
            foreach( $row AS $key => $val ){
            $$key = stripslashes( $val );
            }

            // Register session variables!
            $_SESSION['username'] = $row['username'];
            $_SESSION['email_address'] = $row['email_address'];
       
            // 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
Avatar billede danic Nybegynder
18. juli 2003 - 12:55 #20
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.
Avatar billede rzj Nybegynder
18. juli 2003 - 13:10 #21
jeg har tilføjet dette:

$username = $_POST['username'];
$password = $_POST['password'];

samt ændret denne if:
if($username == "" || $password == ""){
Avatar billede danic Nybegynder
18. juli 2003 - 13:32 #22
Men hvis der er en cookie, skal denne del vel springes over?

// Konventere variable fra login form
$username = $_POST['username'];
$password = $_POST['password'];

// Check om der er data i login form
if($username == "" || $password == ""){
echo "Alle felter skal udfyldes! <br>";
include 'login.html';
exit();
}

// Hvis flueben sat i login form opret cookie1
if(isset($_POST['auto'])){
 
  $encryptpass = md5($password);
  setcookie ("cookieuser","$username", time()+365*10);
  setcookie ("cookiepass","$encryptpass", time()+365*10);
}
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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