Autor | Zpráva | ||
---|---|---|---|
FragMan Profil * |
#1 · Zasláno: 7. 8. 2006, 13:18:10
Mám jednoduchý přihlašovací systém na web, ale mám problém - přihlášený jsem do té doby, než vypnu prohlížeč. Pak se musím přihlásit znova. A to já nechci. Chci, abych byl přihlášen i po restartu prohlížeče a nemusel se znova přihlašovat.
Kód: <? // začátek třídy login class login { // hodnoty předávané při příhlaąování uľivatele var $login_name; var $login_pw; // hodnoty o uľivateli var $id_user; var $firstname; var $lastname; // interní hodnoty var $is_logged; var $session_login_string; var $ip; var $last_time; // nastavení délky nečinosti uľivatele před odhláąením var $checktimelimit; // spojení na databázi var $db; var $table; // konstruktor třídy obsahující inicializaci některých proměných function login(){ if (isset($_POST["login_name"])){ $this->login_name=htmlspecialchars($_POST["login_name"]); }else{ $this->login_name=htmlspecialchars($_SESSION["login_name"]); } $this->login_pw=htmlspecialchars($_POST["login_pw"]); $this->session_login_string=htmlspecialchars($_SESSION["session_logi n_string"]); // zabezpečení proti útokům typu SQL inject $this->session_login_string=$this->test_sql($this->session_login_str ing); $this->login_name=$this->test_sql($this->login_name); $this->login_pw=$this->test_sql($this->login_pw); global $db; $this->db=$db; $this->table="test_users"; $this->ip=$_SERVER["REMOTE_ADDR"]; // délka časového limitu v sekundách od posledního přístupu $this->checktimelimit=999999; $this->logged(); } // přihláąení/odmítnutí uľivatele function first_login(){ if (strlen($this->login_name)>1){ $new_pw=md5($this->login_pw); $query="SELECT session FROM $this->table WHERE username LIKE '".$this->login_name."' AND pw LIKE '".$new_pw."'"; $result = @mysql_query($query,$this->db); if (mysql_num_rows($result)==1){ // ok prilogovat $this->session_login_string=md5(uniqid(rand())); $query="UPDATE $this->table SET session='".$this->session_login_string."', ip='$this->ip' WHERE username='".$this->login_name."' AND pw='".$new_pw."'"; $result = mysql_query($query,$this->db); //zapsání času přihláąení uľivatele $query="UPDATE $this->table SET lasttime=now() WHERE session='".$this->session_login_string."' AND username='".$this->login_name."'"; $result = @mysql_query($query,$this->db); $_SESSION["session_login_string"]=$this->session_login_string; $_SESSION["login_name"]=$this->login_name; $this->load(); return 1; } else { //zobrazit hlasku o neuspesnem logovani return 0; } } else { // nezadano username ... return 0; } } // odhláąení uľivatele function logout(){ $query="UPDATE $this->table SET session='".md5(uniqid(rand()))."' WHERE session='".$this->session_login_string."' and ip='$this->ip'"; $result = mysql_query($query,$this->db); $this->session_login_string=md5(uniqid(rand())); $this->login_name=md5(uniqid(rand())); session_unset(); session_destroy(); $this->logged(); echo "<meta http-equiv=\"refresh\" content=\"0;url=http://www.callofduty2.cz/index.php?page=logout\">"; } // testování zda je uľivatel jiľ přihláąen function logged() { $query="SELECT username FROM $this->table WHERE session='".$this->session_login_string."' AND username='".$this->login_name."' AND ip='".$this->ip."' AND lasttime>=DATE_SUB(now(),INTERVAL ".$this->checktimelimit." SECOND)"; $result = @mysql_query($query,$this->db); $data = @mysql_fetch_array($result); if (mysql_num_rows($result)==1){ $query="UPDATE $this->table SET lasttime=now() WHERE session='".$this->session_login_string."' AND username='".$this->login_name."'"; $result = @mysql_query($query,$this->db); $this->load(); return (1); } else { return (0); } } // naplnění proměných function load(){ $query="SELECT * FROM $this->table WHERE session='".$this->session_login_string."' AND ip='$this->ip' AND username='".$this->login_name."'"; $result = @mysql_query($query,$this->db); $data = @mysql_fetch_array($result); if (mysql_num_rows($result)==1){ $this->id_user=$data[id]; $this->firstname=$data[firstname]; $this->lastname=$data[lastname]; $this->lasttime=$data[lasttime]; $this->is_logged=1; } else { $this->is_logged=0; } } // zabezpečení proti útokům typu SQL inject function test_sql($teststring){ $teststring=strtr($teststring," ","x"); $teststring=strtr($teststring,"+","x"); $teststring=strtr($teststring,"--","x"); $teststring=strtr($teststring,"&","x"); return ($teststring); } // zobrazení formuláře pro přihláąení function show_login_form(){ ?> <div align="right"> <form method="POST" alt="form_prihlaseni" action="index.php"> <b>jméno:</b> <input style="border: 1px solid #000000; background-color: #C0C0C0" type=text name="login_name" size="20"> <b>heslo:</b> <input style="border: 1px solid #000000; background-color: #C0C0C0" type=password name="login_pw" size="20"> <input type="submit" style="border: 1px solid #000000; background-color: #CCCCCC; font-weight: bold" value="Přihlásit"> <a href="http://callofduty2.cz/index.php?page=register/index">Registrovat </a> </form> </div> <? } // konec třídy login } ?> |
||
Celebi Profil |
#2 · Zasláno: 7. 8. 2006, 13:21:39
Použij cookie.
|
||
djlj Profil |
#3 · Zasláno: 7. 8. 2006, 13:22:00
Chci, abych byl přihlášen i po restartu prohlížeče a nemusel se znova přihlašovat.
V tom případě bych použil cookies. |
||
FragMan Profil * |
#4 · Zasláno: 7. 8. 2006, 13:22:37
Nejsem na to moc expert, dělal jsem to podle návodu z netu, našla by se prosím prosím nějaká dobrá duše, která by ten kód patřičně upravila?
|
||
FragMan Profil * |
#5 · Zasláno: 7. 8. 2006, 17:44:33
[VYŘEŠENO]
|
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0