Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] sesje trace nadzieje :[
Forum PHP.pl > Forum > Przedszkole
piotrekkr
Witam mam problem ktory jak dal mnie zadziwiajacy jest i wogole kosmiczny. Napisałem taka klase:
  1. <?php
  2. require_once('class.DB.php');
  3. require_once('class.validator.php');
  4. require_once('class.config.php');
  5.  
  6. class login{
  7.  
  8. protected $login = '';
  9. protected $password = '';
  10. protected $old_password = '';
  11. protected $new_password1 = '';
  12. protected $new_password2 = '';
  13.  
  14. protected static $instance;
  15.  
  16. protected function __construct(){
  17. $config = config::singleton();
  18. session_set_cookie_params($config->sessionLifetime);
  19. session_cache_limiter("private_no_expire");
  20. if(!empty($_POST['login'])) $this->login = $_POST['login'];
  21. if(!empty($_POST['password'])) $this->password = mysql_escape_string($_POST['password']);
  22. if(!empty($_POST['old_password'])) $this->old_password = mysql_escape_string($_POST['old_password']);
  23. if(!empty($_POST['new_password1'])) $this->new_password1 = mysql_escape_string($_POST['new_password1']);
  24. if(!empty($_POST['new_password2'])) $this->new_password2 = mysql_escape_string($_POST['new_password2']);
  25. }else{
  26. if(!empty($_POST['password'])) $this->password = $_POST['password'];
  27. if(!empty($_POST['old_password'])) $this->old_password = $_POST['old_password'];
  28. if(!empty($_POST['new_password1'])) $this->new_password1 = $_POST['new_password1'];
  29. if(!empty($_POST['new_password2'])) $this->new_password2 = $_POST['new_password2'];
  30. };
  31. }
  32.  
  33. public static function singleton(){
  34. if (!isset(self::$instance)) {
  35. $c = __CLASS__;
  36. self::$instance = new $c();
  37. }
  38. return self::$instance;
  39. }
  40.  
  41. public function checkLoginData(){
  42. $validator = validator::singleton();
  43. if(!$validator->validatePassword($this->password)){
  44. return false;
  45. }else if(!$validator->validateLogin($this->login)){
  46. return false;
  47. }else{
  48. $db = DB::singleton();
  49. $pass = md5(stripslashes($this->password));
  50. if(strtolower($this->login) == 'admin'){
  51. $query = "SELECT COUNT(*) AS COUNT FROM `ADMIN` WHERE `PASSWORD` = '$pass'";
  52. }else if($validator->validatePESEL($this->login)){
  53. $query = "SELECT COUNT(*) AS COUNT FROM `STUDENTS` WHERE `PESEL` = '$this->login' AND `PASSWORD` = '$pass'";
  54. }else{
  55. $query = "SELECT COUNT(*) AS COUNT FROM `TEACHERS` WHERE LOWER(`NAME`) = LOWER('$this->login') ";
  56. $query .= "AND `PASSWORD` = '$pass'";
  57. };
  58. $db->send_query($query);
  59. $error = $db->isQueryError();
  60. if($error === false){
  61. $row = $db->getRow();
  62. if($row['COUNT'] == 1){
  63. return true;
  64. }else{
  65. return false;
  66. };
  67. }else{
  68. return $error;
  69. };
  70. };
  71. }
  72.  
  73. public function login(){
  74. $data = $this->checkLoginData();
  75. $validator = validator::singleton();
  76. if($data === true){
  77. if(strtolower($this->login) == 'admin'){
  78. $_SESSION['logged'] = true;
  79. $_SESSION['user_login'] = 'Admin';
  80. header('Location: index.php?p=0');
  81. }else if($validator->validatePESEL($this->login)){
  82. $_SESSION['logged'] = true;
  83. $_SESSION['user_login'] = $this->login;
  84. header('Location: index.php?p=0');
  85. }else{
  86. $db = DB::singleton();
  87. $query = "SELECT * FROM `TEACHERS` WHERE LOWER(`NAME`) = LOWER('$this->login')";
  88. $db->send_query($query);
  89. $row = $db->getRow();
  90. if($db->isQueryError() === false){
  91. $_SESSION['logged'] = true;
  92. $_SESSION['user_login'] = $row['NAME'];
  93. $_SESSION['SCHOOL_ID'] = $row['SCHOOL_ID'];
  94. $_SESSION['CLASS_ID'] = $row['CLASS_ID'];
  95. $_SESSION['TEACHER_ID'] = $row['TEACHER_ID'];
  96. header('Location: index.php?p=0');
  97. }else{
  98. return $db->isQueryError().$this->showLoginForm();
  99. };
  100. };
  101. }else if($data === false){
  102. return '<div class="error">Niepoprawne dane. Spróbuj ponownie.</div>'.$this->showLoginForm();
  103. }else{
  104. return $data.$this->showLoginForm();
  105. };
  106. }
  107.  
  108. public function isStudent(){
  109. $validator = validator::singleton();
  110. if(!empty($_SESSION['logged']) && $validator->validatePESEL($_SESSION['user_login'])) return true; else return false;
  111. }
  112.  
  113. public function logout(){
  114. $_SESSION = array();
  115. }
  116.  
  117. public function getLogin(){
  118. return $_SESSION['user_login'];
  119. }
  120.  
  121. public function getTeacherId(){
  122. return $_SESSION['TEACHER_ID'];
  123. }
  124.  
  125. public function isAdmin(){
  126. if(!empty($_SESSION['user_login']) && $_SESSION['user_login'] == 'Admin' && $_SESSION['logged'] === true) return true; else return false;
  127. }
  128.  
  129. public function isTeacher(){
  130. if(!empty($_SESSION['user_login']) && $_SESSION['logged'] == true && !empty($_SESSION['SCHOOL_ID']) && !empty($_SESSION['CLASS_ID']) 
  131. && !empty($_SESSION['TEACHER_ID'])){
  132. return true;
  133. }else{
  134. return false;
  135. };
  136. }
  137.  
  138. public function showAccount(){
  139. if($this->isTeacher()){
  140. $teacher_id = $this->getTeacherId();
  141. $query = "SELECT `SCHOOL_NAME`, `CLASS_NAME` FROM `SCHOOLS`,`CLASSES` WHERE `SCHOOLS`.`SCHOOL_ID` = 
  142. ".$_SESSION['SCHOOL_ID']." AND CLASSES.CLASS_ID = ".$_SESSION['CLASS_ID'];
  143. $db = DB::singleton();
  144. $db->send_query($query);
  145. $error = $db->isQueryError();
  146. if($error === false){
  147. $row = $db->getRow();
  148. return '<div class="center">
  149. <table style="margin:10px auto;">
  150. <tr><td><div class="right">Szkoła: </div></td><td><div class="left">'.$row['SCHOOL_NAME'].'</div></td></tr>
  151. <tr><td><div class="right">Wychowawca(czyni) klasy: </div></td><td><div class="left">'.$row['CLASS_NAME'].'</div></td></tr>
  152. </table>
  153. <br /><br />
  154. <a href="index.php?p=1&amp;action=change_pass_form">Zmiana hasła</a>
  155. </div>';
  156. }else{
  157. return $error;
  158. };
  159. }else if($this->isAdmin()){
  160. return '<br /><br /><div class="center"><a href="index.php?p=1&amp;action=change_pass_form">Zmiana hasła</a></div>';
  161. }else{
  162. return '<div class="error">Nie jesteś zalogowany(a) jako nauczyciel</div>';
  163. };
  164. }
  165.  
  166. public function showLoginForm(){
  167. return '
  168. <div class="center">
  169. <form action="index.php?p=1&amp;action=login" method="post">
  170. <table style="margin:50px auto;">
  171. <tr><td class="right">Login: </td><td><input type="text" maxlength="30" name="login" class="login" /></td></tr>
  172. <tr><td class="right">Hasło: </td><td><input type="password" maxlength="30" name="password" class="login" /></td></tr>
  173. <tr><td colspan="2" class="right"><input type="submit" value="Zalogój" class="submit" /></td></tr>
  174. </table>
  175. </form>
  176. </div>';
  177. }
  178.  
  179.  
  180. };
  181. ?>

uzywam jej i jak odswierzam strone to raz funkcja isAdmin() pokazuje ze admin a raz ze nie :/ wogole nie wiem jakim cudem tak moze pokazywac hosting jest na internetdsl.pl ja nie wiem podobnie mam tylko z inna strona na boo.pl trace powoli nadzieje. Na localhoscie zadnych bledow nic wszystko dzial jak powinno na hostingu nie dziala jak powinno i tez zadnych bledow. Zaraz szlak mnie trafi. Prosze o pomoc axesmiley.png
php programmer
Niektóre serwery, szczególnie te darmowe,
mają wyłączoną obsługe sesji,
napisz sobie jakis mini skrypt żeby sprawdzić
piotrekkr
no to nie sa darmowe serwery internetdsl to serwer dsla telekomuny a boo.pl tez jest platny ale oni cos ostatnio kombinuja z tym php :/ zupelnie nie wiem co jest zle bo na localhoscie wszystko dziala a jak wezme na serwer to i sie zalogoje i pozniej zaczynam odswierzac to raz jestem zalogowany raz nie wogole kosmos jakis jak dla mnie aha dodam ze na serwach jest php5.

// edit
rozwiazalem problem przez zalozenie na ovh.pl darmowego konta. Polecam jesli ktos bedzie mial podobny problem
1010
Napisz do administracji z pytaniem o obsługę sesji.
jarrod
Za każdym razem jak uruchamiasz tą klasę masz tablicę POST z tymi elemetami?
piotrekkr
e tam po co sie uzeraz z tymi ludzmi to jest telekomuna czemu sie dziwic pewnie i tak by nie odpisali albo odpisali po 2 tyg a tak mam dobry i darmowy hosting na ovh.pl
jarrod
Cytat(piotrekkr @ 23.10.2006, 19:18:55 ) *
e tam po co sie uzeraz z tymi ludzmi to jest telekomuna czemu sie dziwic pewnie i tak by nie odpisali albo odpisali po 2 tyg a tak mam dobry i darmowy hosting na ovh.pl

Czy ten hosting na OVH taki wspaniały jest to nie wiem... Mam tam konto i czasami mam ich dosyć.
piotrekkr
Cytat(jarrod @ 23.10.2006, 19:18:03 ) *
Za każdym razem jak uruchamiasz tą klasę masz tablicę POST z tymi elemetami?

tzn czasem mam czasem nie jak nie mam to wartosci domyslne sa zazwyczaj ''. To zalezy od tego do czego jej uzywam. Importuje ta klase do innego pliku:
  1. <?php
  2. require_once('class.login.php');
  3. ?>


a pozniej :
  1. <?php
  2. $login = login::singleton();
  3. ?>


ale akurat $_POST[] nie ma tutaj nic do rzeczy bo logowanie dziala samo w sobie tylko jest cos nie tak z sesja bo jak uzywam funkcji:
  1. <?php
  2. $login->isAdmin()
  3. ?>
to ona czasem zwraca true a czasem false :/ a ty zalezy tylko i wylacznie od tego czy sa ustawione konkretne zmienne sesyjne.

Cytat
Czy ten hosting na OVH taki wspaniały jest to nie wiem... Mam tam konto i czasami mam ich dosyć.

ja mam dosyc tego internetdsl.pl i boo.pl bo tam ten skrypt nie dziala i jest ten sam problem :/ a na ovh dziala bez problemow zadnych wiec jest lepszy smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.