Autor Zpráva
Rain
Profil *
Mám pro svou aplikaci 2 objekty, objekt Session který spravuje session relace a objekt User, který se stará o data uživatele a nyní řeším, jak inteligentně "dát vědět" objektu User, že uživatel je skutečně přihlášen (což zjistí objekt Session). Když použiji public metodu, tak to zrovna inteligentní nebude, pak bych mohl tento status změnit z jakéhokoliv objektu v aplikaci. Při svém hledání jsem našel pár řádků o Data Transfer Object, bohužel bez většího popisu. Nějaké řešení, nebo je lepší třídy těchto objektu sloučit?
bukaj
Profil
Rain
Tady asi bude hodně záležet na tom, jak to máš implementované. Hodilo by se znát alespoň interface (není tím míněno to klíčové slovo, ale výpis jejich metod) těch tříd.
Rain
Profil *
class Session
{
   public function Start();  // Načte z cookie SID, najde v DB relaci, spustí metodu _refresh pro obnovu relace
   public function Create($userId, $autologin = false); // vytvoří novou relaci pro uživatelské ID, vygeneruje SID, uloží cookie
   public function Delete(); // Odstraní relaci podle SID z cookie a poté samotnout cookie

   /**
    * Obnova relace, voláno metodou Start, kontroluje zda se v průběhu relace nezměnil prohlížeč nebo IP,
    * obnovuje časy platnosti session v DB a cookie. Nastavuje stav přihlášení.
    */
   private function _refresh($userIp, $userBrowser, $regenerateId = false);
   private function _generator(); // Generování SID
   private function _save($id, $expire = 365, $domain = '', $path = '/', $secure = false); // Uložení cookie se SID
   private function _load(); // Načtení cookie se SID
}

class User
{
   public function isLogged(); // Zde by měl být přebrán stav přihlášení, o kterém se rozhodne v metodě _refresh třídy Session
   
   // další metody pro zjišťování IP adresy, prohlížeče, zda je uživatel registrován atp.
}
K
Profil *
class Session{
.. tve metody

public function ukazStavPrihlaseni()
{
return $this->stavPrihlaseni
}
}

ale prijde mi naprd, ze stav prihlaseni nastavujes v tride Session - o to by se mela starat autorizacni trida, coz by tak trochu mohla byt tva trida User.
Rain
Profil *
Tak přejmenuju Sessions na Authorization, nějaká změna? Pokud budu chtít metody rozumně rozdělit, pak budu mít třídy pro manipulaci s uživatelským účtem (úprava uživatelských dat, nový uživatel, ...) a třídu pro manipulaci s relacemi - Sessions - a budu opět řešit tento problém.
bukaj
Profil
Rain
Chápu-li to správně, tak třída Session jen obstarává vytváření, regenerování a mazání cookie PHPSESSID, ale k session proměnným přistupuješ přes superglobální pole $_SESSION? Proto by třída měla být buď statická, nebo jedináček (návrhový vzor Singleton), což je pro tebe asi záhodnější, a neměla by rozhodovat o tom, je-li uživatel přihlášen. Rozhoduješ podle čeho? Podle toho, sedí-li SID, IP a prohlížeč? Nevím, ale nezdá se mi to zrovna nejlepší. Rozhodovat by ses měl spíše podle obsahu session než podle její (ne)přítomnosti.
K
Profil *
Rain
Idealni by bylo Session, Autenthize, Autorize, User. Rozhodne bych necpal overovani zda je prihlasen do Session ktera slouzi k manipulaci s $_SESSION. Mozna ti to prijde jako prkotina, ale ve vysledku je dobre mit kod dobre objektove rozdelen.
Reseni problemu jsem ti ukazal. Ale priklanim se k bukajovi pouzit Singleton.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: