| Autor | Zpráva | ||
|---|---|---|---|
| Tirus Profil |
#1 · Zasláno: 6. 4. 2011, 20:27:11
Lidi, prosím, dalo by se to zlepšit? Je to má první třída a snaha o OOP...
<?php
class Users {
protected $registry;
protected $view;
protected $args;
public function __construct($registry) {
$this->registry = $registry;
$this->registry = $registry;
$this->view = $this->registry['view'];
$this->args = $this->registry['args'];
}
//registrace
function registrate($login, $password, $email, $name, $msn, $icq) {
$password = $this->passHash($password, $login);
$ssid = sha1($password . $login);
$arr = array(
'nick' => $login,
'password' => $password,
'email' => $email,
'name' => $name,
'icq' => $icq,
'msn' => $msn,
'ssid' => $ssid,
);
if (dibi::query('INSERT INTO [' . DB_PREFIX . 'users]', $arr)) {
return TRUE;
} else {
return FALSE;
}
}
//přihlášení
function login($login, $password) {
$result = dibi::query("SELECT [ssid],[nick],[password] FROM [" . DB_PREFIX . "users] WHERE %and ", array("nick" => $login, "password" => $this->passHash($password, $login)));
$count = count($result);
if ($count <= 1) {
foreach ($result as $polozka) {
$_SESSION['SSID'] = $polozka['ssid'];
$_SESSION['login'] = $polozka['nick'];
$_SESSION['SSP'] = $polozka['password'];
continue;
}
return TRUE;
} else {
return FALSE;
}
}
//kontrola zda je uživatel přihlášen
function is_logged() {
if (isset($_SESSION['SSID']) AND isset($_SESSION['login']) AND isset($_SESSION['SSP'])) {
if ($_SESSION['SSID'] == sha1($_SESSION['SSP'] . $_SESSION['login'])) {
return TRUE;
} else {
return FALSE;
}
} else {
return FALSE;
}
}
//odhlášení uživatele
function logout() {
unset($_SESSION['SSID']);
unset($_SESSION['SSP']);
unset($_SESSION['login']);
}
// Získání hash pro heslo
function passHash($password, $nick) {
return sha1($nick . sha1($password));
}
}
|
||
| Jan Tvrdík Profil |
#2 · Zasláno: 6. 4. 2011, 20:54:30 · Upravil/a: Jan Tvrdík
1) Třída by se měla jmenovat spíš
UserManager nebo UserModel.
2) Vlastnosti $registry, $view a $args se vůbec nepoužívají.
3) 10. a 11. řádek provádí to samé. 4) Metodu registrate přejmenuj na register, slovo registrate neexistuje.
5) Doplň k jednotlivým metodám modifikátory přístupu. 6) Metodu passHash přejmenuj na generatePasswordHash
7) Logika generování SSID by měla být ve zvláštní metodě. |
||
| Tirus Profil |
#3 · Zasláno: 6. 4. 2011, 21:04:01
Jan Tvrdík:
takže zda to chápu, tak konstruktor a protected $registry, apod.. mám odstranit.. ovšem nepochopil jsem 5tý bod |
||
| Jan Tvrdík Profil |
#4 · Zasláno: 6. 4. 2011, 21:09:34
Tirus:
Modifikátory přístupu jsou public, protected a private.
Celé by to mohlo vypadat třeba takto: <?php
class UserManager
{
/**
* Zaregistruje uživatele.
*/
public function register($login, $password, $email, $name, $msn, $icq)
{
$passwordHash = $this->generatePasswordHash($password, $login);
$ssid = $this->generateSessionId($passwordHash, $login);
return (bool) dibi::query('INSERT INTO [' . DB_PREFIX . 'users]', array(
'nick' => $login,
'password' => $passwordHash,
'email' => $email,
'name' => $name,
'icq' => $icq,
'msn' => $msn,
'ssid' => $ssid,
));
}
/**
* Přihlásí uživatele.
*/
public function login($login, $password)
{
$user = dibi::fetch('
SELECT [ssid], [nick], [password]
FROM [' . DB_PREFIX . 'users]
WHERE %and', array(
'nick' => $login,
'password' => $this->generatePasswordHash($password, $login)
)
);
if ($user === FALSE) return FALSE;
$_SESSION['SSID'] = $user['ssid'];
$_SESSION['login'] = $user['nick'];
$_SESSION['SSP'] = $user['password'];
return TRUE;
}
/**
* Vrátí TRUE, pokud je uživatel přihlášen, jinak FALSE.
*/
public function is_logged()
{
if (!isset($_SESSION['SSID'], $_SESSION['login'], $_SESSION['SSP'])) {
return FALSE;
}
return ($_SESSION['SSID'] == $this->generateSessionId($_SESSION['SSP'], $_SESSION['login']));
}
/**
* Odhlásí uživatele.
*/
public function logout()
{
unset($_SESSION['SSID']);
unset($_SESSION['SSP']);
unset($_SESSION['login']);
}
/**
* Vygeneruje hash pro heslo.
*/
private function generatePasswordHash($password, $nick)
{
return sha1($nick . sha1($password));
}
/**
* Vygeneruje SSID.
*/
private function generateSessionId($passwordHash, $nick)
{
return sha1($passwordHash . $nick);
}
} |
||
| Tirus Profil |
#5 · Zasláno: 6. 4. 2011, 21:11:09
Jan Tvrdík:
tak jsem to pochopil správně.. ovšem abych se ujistil private -> dostupný pouze v této tříde protected -> toto netuším public -> dostupný odkudkoliv (z celé aplikace) |
||
| Jan Tvrdík Profil |
#6 · Zasláno: 6. 4. 2011, 21:14:39
|
||
| Tirus Profil |
#7 · Zasláno: 6. 4. 2011, 21:17:02
Jan Tvrdík:
děkuji moc, jinak se optám, pochopil jsem to OOP apoň trochu z tvého pohledu? |
||
| Jan Tvrdík Profil |
#8 · Zasláno: 6. 4. 2011, 21:28:34
Tirus:
Řekl bych, že jsi na dobré cestě. |
||
| Tirus Profil |
#9 · Zasláno: 6. 4. 2011, 21:31:13
Jan Tvrdík:
děkuji... až něco zase sesmolím, tak to sem dám a uvidím zda to už chápu :) .. ale děkuji za takovej nákop do začátku :) |
||
|
Časová prodleva: 15 let
|
|||
Toto téma je uzamčeno. Odpověď nelze zaslat.
0