| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
Login ClassMeitsi 14.11.05 17:47 Pienimuotoinen kirjautumisluokka (Hieman lisää muokattu versio)
// user.inc <? class UserClass { var $user_id = -1; var $username = ""; var $firstname = ""; var $surname = ""; function User($id, $login, $f_name, $s_name) { $this->user_id=$id; $this->username=$login; $this->firstname=$f_name; $this->surname=$s_name; } function getUserInfo($user) { // Kysely id:n, etunimen ja sukunimen hakemista varten kannasta $q = "SELECT id,firstname, surname FROM user_user WHERE user='".mysql_real_escape_string($user)."'"; $result = mysql_query($q); // Haetaan tiedot taulukkoon $l = mysql_fetch_row($result); //Palautetaan taulukko toiselle funktiolle return $l; } function getPassword($user) { // Tietokantakysely $q = "SELECT passwd FROM user_user WHERE user='".mysql_real_escape_string($user)."'"; $result= mysql_query($q) or die("Error".mysql_error()); $l = mysql_fetch_row($result); return $l[0]; } function checkPasswords($given_password, $password_from_database, $user) { // Jos annettu salasana oikein, palautetaan true, muutoin null if($given_password == $password_from_database) { return true; } return null; } } function loginUser($user, $password) { // Luodaan $user_class niminen luokka $user_class = new UserClass(); // Haetaan salasana kannasta $get_password = $user_class->getPassword($user); // Verrataan salasanoja $check_passwords = $user_class->checkPasswords($password,$get_password, $user); if($check_passwords == 1) { $user_info = $user_class->getUserInfo($user); return new UserClass($user_info[0], $user, $user_info[1], $user_info[2]); } return null; } ?> // config.php:hen seuraavat rivit //Kirjautumis parametrit define(LOGIN_NAME_PARAM, "loginname"); $loginname = $_POST[LOGIN_NAME_PARAM]; define(LOGIN_PASSWORD_PARAM, "loginpassword"); $loginpassword = $_POST[LOGIN_PASSWORD_PARAM]; // Käyttäjäobjektin nimi sessiossa define(USER_LOGIN_SESSION_NAME, "logged_user"); // Sisäänkirjautuminen if($loginname && $loginpassword) { $user_object = loginuser($loginname, $loginpassword); if($user_object) { $HTTP_SESSION_VARS[USER_LOGIN_SESSION_NAME] = $user_object; //print $HTTP_SESSION_VARS[USER_LOGIN_SESSION_NAME]; } } // Alustetaan kirjautumisobjekti // $logged_user = $HTTP_SESSION_VARS[USER_LOGIN_SESSION_NAME]; --------------------------------------------------------------- Lisäksi kirjautumisen tarkistus if(!is_object($logged_user)) { header("location: kirjautumisruutuun"); exit(""); } raspi 18:08 14.11.05 Lisää mysql_real_escape-string-funktio jokaiseen kyselyyn. Ezku 23:19 14.11.05 Hetttkinen. Luokkien käyttämisestä bonusta, mutta miinusta huonosta suunnittelusta - miksi User-luokkia on kaksi? Miksi proseduraalisia funktioita? Yritys jää tällaisenaan hieman sillisalaatiksi. :) Irksome 09:00 15.11.05 Nipotusta hieman, mutta ei toki luoda uutta $user_class -nimistä luokkaa, vaan luokan UserClass ilmentymä eli olio :) editoitu: 11:24 15.11.05 harja 11:22 15.11.05 No tämäpäs oli aika... mielenkiintoinen. Miksi ei tuo User-luokka voi hoitaa noita kaikkia toiminnallisuuksia? Tällaisenaanhan tämä ei oikein ole kauhan hyvää olio-ohjelmointia. Jos tämän tekisi paremmin, voisi käyttö olla jotain tällaista: $userManager = new UserManger(session_id()); if(!$userManager->isAuthenticated()) { // Authenticate hoitaa myös sessiopuolen ja muut hässäkät if(!($userInfo = $userManager->authenticate($_POST["user"], $_POST["password"]))) { // vaihtoehtoisesti myös authenticate voisi heittää tämän, mutta esimerkin vuoksi näinkin päin throw new AuthenticationException("Authentication error! Check username and password."); } } else { $userInfo = $userManager->get(); } // täällä sitten tehdään jotain sheibeä, tulostetaan vaikka käyttäjän tiedot, sopivalla frameworkilla $this->view->attach('userInfo', $userInfo); $this->view->add('userdata.php'); Autentikoinnin voisi sitten hoitaa vaikka Filterissä (kts. vaikka Ezkun hyvä MVC-esimerkki) tai jossain muussa vastaavassa, niin koko muun applikaation ei tarvitsisi panikoida käyttäjän autentikoituvuudesta - se kun olisi hoidettu kaikkien puolesta. UserMangerilta sitten voi pyytää kaikki mahdolliset tiedot, mikäli tarvitsee kustomoida näkymää esim. käyttäjäkohtaisesti (oikeustasot, näkymät jne). |
![]() Haku
|