Jump to content

návod Stálé přihlášení na webu


Guest Punkevník

Recommended Posts

Na Apps (nástupce dejtotam) mám možnost nechat se přihlásit nastálo.

Funguje to tak, že při každém přihlášení se vygeneruje jedinečný klíč který se uloží do DB a v případě že uživatel chce stálé přihlášení se klíč zapíše i do cookies.

Jelikož se při každém přihlášení vygeneruje klíč nový, tak klíče, které jsou uloženy v cookies se stanou neplatnými (= pokuď se přihlašuji z více míst, tak mě to vždy odhlásí)

 

Fuguje to tak:

nepřihlášený:

Zadám jméno a heslo (a potvrdím trvalé přihlášení)

-> Probíhá proces přihlašování

-> Vygeneruje se klíč, který se uloží v DB a v cookie

-> Zkončen proces přihlašování

 

přihlášený:

Zkontroluji jestli je cookie platné

-> smažu cookie/Probíhá proces přihlašování přes klíč

-> Vygeneruje se klíč, který se uloží v DB a v cookie

-> Zkončen proces přihlašování

 

Do webu nahoru:

if(!isset($_SESSION["xXx"])){ //Pokuď neexistuje session proměnná, dosaďte si svoji
 if(isset($_COOKIE["login_hash"])){ //Pokuď existuje cookie uchovávající stálé přihlašování
   login_hash($_COOKIE["login_hash"]); //Spustíme funkci
 }
}

 

funkce login_hash

function login_hash($hash){
 $query = "select * from USERS where LOGIN_HASH = '" . $hash . "'"; //Upravte si na svoji tabulku s uživateli
 $result = mysql_query($query) or die(); //Vykonáme dotaz
 $num = mysql_num_rows($result); //Spočítáme nalezené řádky
 if ($num==0){ //Pokuď klíč nesouhlasí
   setcookie($COOKIE_PREFIX . "login_hash", $hash, time() - 3600); //Smažeme cookie
 }else{ //Nebo
   while ($row=mysql_fetch_array($result)){ //Vybereme záznamy
     $_SESSION["IdUser"] = $row["ID"]; //Dosadíme do sessionu to co chceme
     $hash_new = sha1(microtime()); //Vygenerujeme nový klíč
     $query2 = "update USERS set LOGIN_HASH = '" . $hash_new . "' where LOGIN_HASH = '".$hash."';"; //Nastavíme nový klíč
     $result2 = mysql_query($query2) or die("SQL dotaz nešlo provést"); //Vykonáe dotaz
     setcookie("login_hash", $hash_new, time()+7*24*60*60); //Uložíme hodnotu nového klíče do cookie
   }
   header('Location: ?page=home'); //Přesměrujeme na index
 }
}

a ke klasickému přihlášení si dejte

$hash = sha1(microtime()); //Vygenerujeme klíč
$query2 = "update USERS set LOGIN_HASH = '" . $hash . "' where USERNAME_CLEAN = '".$username."';"; //where si upravte na vlastní
$result2 = mysql_query($query2) or die("SQL dotaz nešlo provést"); //Vykonáme dotaz
if($_POST["remember"] == "on"){ //Pokuď byl checkbox s name="remember" aktivní
 setcookie($COOKIE_PREFIX . "login_hash", $hash, time()+7*24*60*60); //Uložíme do cookie
}else{ //Pokuď nebyl aktivní
 setcookie($COOKIE_PREFIX . "login_hash", $hash, time() - 3600); //Smažeme pro jistotu cookie
}

Přidat k logoutu

$hash = sha1(microtime());
$query = "update USERS set LOGIN_HASH = '" . $hash . "' where ID = '".$IdUser."';"; //Upravte si na svoje
$result = mysql_query($query) or die("SQL dotaz nešlo provést");
setcookie($COOKIE_PREFIX . "login_hash", $hash, time() - 3600); //Smažeme pro jistotu cookie

 

POZOR! Pro správnou funkci je potřeba vytvořit sloupec ID_HASH[varchar(100)] do tabulky uživatelů a dotazy upravit ke kráse svoji :)

 

Toť vše, snad to funguje.

Kdybyste nalezli nějakou chybu nebo by vám to nejelo, tak se vám pokusím pomoct :v:

Link to comment
Share on other sites

díky , jen by se hodilo to.. to co muzes napsat v phpmyadminu do te sql a ona se ta tabulka vytvori podle toho a presnejsi napsat co kde dat..

Jasné, aby jsi mohl dát ctrl+c a ctrl+v ;):d

Link to comment
Share on other sites

To nevím jestli je to jednodušší, ale jak jsem to pochopil od tebe, tak když bych se přihlásil ve dvou prohlížečích, tak by mě to v prvním odhlásilo.

Mě šlo o to, aby mohlo být maximálně jedno trvalé přihlášení.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...