Autor Zpráva
FragMan
Profil *
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
Použij cookie.
djlj
Profil
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 *
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 *
[VYŘEŠENO]
Toto téma je uzamčeno. Odpověď nelze zaslat.