Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Session handler, Czy opłaca się trzymać osobno zmienne?
Prph
post
Post #1





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Witam,

W PHP5 zaawansowane programowanie autorzy przedstawili mechanizm obslugi sesji, ktory trzymal zmienne w osobnej tabeli. Dzieki tezmu wydajnosc miala nieco wzrosnac.

Takie rozwiazanie jednak ma pewna wade - zmienne pobierane za z sesji poprzez metody __get i __set, nie zaś $_SESSION['zmienna'];

W chwili obecnie przysparza mi to więcej problemów niż mogłem to sobie wyobrazić.

Jak Wy organizujecie session handlera? Jest sens dzielenia sesji na zmienne i info o sesji?

Pozdrawiam,
Adrian.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Prph
post
Post #2





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

Ostrzeżenie: (0%)
-----


No i to są bardzo dobre wskazówki - Hawk - dziękuję.
Co do PHPSESSID - wiedzialem o tym (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
co do walidatorów - świetne rozwiązanie.

Witam ponownie.
Usiadlem dzisiaj do klasy sesji i zaczalem modyfikowac ja wedlug cennych uwag Hawka.

Cytat
"Można mieć przecież otwartą sesję nie będąc uwierzytelnionym (zalogowanym). Łącząc to bardzo się ograniczasz:
- tworzysz obiekt User, mimo że klasa sesji nie ma co z tym obiektem zrobić i w efekcie zwraca puste nie-wiadomo-co
- nie możesz wybierać źródła danych o użytkownikach (DB, pliki passwd, SMB i inne, LDAP, ...)
- nie możesz rozbudować uwierzytelniania chociażby o przypisanie użytkownika do grup, bo wszystko jest hard-coded w klasie sesji"


ad 1. - jak tworze pusty obiekt. Wedlug moich zalozen zawsze utworzony zostanienie obiekt uzytkownika.
ad2. Ale to nie sesja chyba o tym powinna decydowac - tym zajmuje sie klasa User. Ona sama siebie uzupelnia danymi.
ad3. Grupy do jakich zapisany jest uzytkownik przechowuje klasa uzytkownika. Dodam kod:

  1. <?php
  2.  
  3. class User
  4. {
  5. private $_oDatabase;
  6.  
  7. private $_sLogin;
  8. private $_sFirstName;
  9. private $_sLastName;
  10.  
  11. private $_iUserId;
  12.  
  13. private $_aGroups;
  14.  
  15. public function __construct($iUserId)
  16. {
  17. $this->_oDatabase = Database::getInstance();
  18.  
  19. $this->_iUserId = $iUserId;
  20.  
  21. $sQuery = 'SELECT login, first_name, last_name, groups
  22.  FROM users
  23.  WHERE id="'.$iUserId.'"';
  24.  
  25. try
  26. {
  27. $this->_oDatabase->query($sQuery);
  28.  
  29. if($this->_oDatabase->numRows() == 1)
  30. {
  31. $aRow = $this->_oDatabase->fetch();
  32.  
  33. $this->_sLogin = $aRow['login'];
  34. $this->_sFirstName = $aRow['first_name'];
  35. $this->_sLastName = $aRow['last_name'];
  36. $aGroups = $this->_groupsToArray($aRow['groups']);
  37.  
  38. if(count($aGroups))
  39. $this->_aGroups = $aGroups;
  40. }
  41. }
  42. catch (Exception $oException)
  43. {
  44. throw $oException;
  45. }
  46. }
  47.  
  48. public function getId()
  49. {
  50. return $this->_iUserId;
  51. }
  52.  
  53. public function getFullName()
  54. {
  55. return $this->_sFirstName.' '.$this->_sLastName;
  56. }
  57.  
  58. public function getGroups()
  59. {
  60. if(isset($this->_aGroups))
  61. return $this->_aGroups;
  62. else
  63. return false;
  64. }
  65.  
  66. private function _groupsToArray($sGroups)
  67. {
  68. $sGroups = strtolower($sGroups);
  69. $aGroups = explode(',', $sGroups);
  70.  
  71. return $aGroups;
  72. }
  73. }
  74.  
  75. ?>


Pozdrawiam.

Ten post edytował Prph 27.03.2006, 22:31:18
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 00:13