Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Pomoc w znaleźeniu błedu, sesje pod operą
Forum PHP.pl > Forum > PHP
propage
Dostałem od klienta informacje, że znikają mu sesje, używa Opery 9.52
Ja stronę testowałem po Operą 9.52, FF i IE nigdzie nie zauważyłem tego błędu.

Dokładnie twierdzi że Kliknie na język angielski, język się zmieni, ale jak przejdzie na jakąś podstronę, wtedy język znowu ustawia się na polski

adres strony to http://sandow.pl/bc/

ciastko ustalam z takimi parametrami
  1. <?php
  2. setcookie(propage, id_Sesji, time() + COOKIE_EXPIRE, '/', .sandow.pl);
  3. ?>


Czy ktoś widzi u siebie ten błąd?
Co może być nie tak?
wookieb
"WYPORZYCZALNIA"!!!! Miodek cię zabije... I nie tylko miodek...

Przełącza się na polski jeżli wejde na "wyszukiwarka samochodów". Ty sesje robisz manualnie?questionmark.gif Nie za pomocą session_start?
propage
tak, sesje trzymam w bazie danych, mógłbym całą klase do obługi sesji skopiować, ale nie wiem czy komuś bedzie się chciało to wszystko analizować smile.gif

A widzisz u siebie ten błąd ?
wookieb
użyj session_set_handler do obsługi sesji. I używaj session_start();
Dla strony na której jest bła sprawdź zawartość sesji i znajdz miejsce gzdie ona sie zmienia i po klopocie.
propage
Przestałem używać swojej klasy do obsługi sesji kiedy użyłem poprostu session_start(); u klienta strona zaczeła działać poprawnie, co więcej sesje działaja u niego poprawnie jeśli nawet używam mojej klasy (ponieważ działał mu panel administracyjny) myśle, więc, że może mieć to jakiś związek z modrewrite na stronie adresy sa budowane tak domena.pl/produkt/produkt

Kopiuje moją klase do obsługi sesji, może ktoś wie co w niej jest nie tak zrobione?

  1. <?php
  2. class session
  3. {
  4.  
  5. private $id;
  6. private $ip;
  7.  
  8. private $time;
  9. private $values;
  10. //user
  11. private $user_id;
  12. private $browser;
  13.  
  14. function __construct()
  15. {
  16. global $db; 
  17.  
  18.  
  19. $this -> ip = $db->escape($_SERVER['REMOTE_ADDR']);
  20. $this -> browser = $db->escape($_SERVER['HTTP_USER_AGENT']);
  21.  
  22. //echo $_COOKIE[COOKIE_NAME];
  23. if(!isset($_COOKIE[COOKIE_NAME]))
  24. {
  25. $_COOKIE[COOKIE_NAME] = '';
  26. }
  27.  
  28. $db->query("SELECT * FROM sessions WHERE session_id = '".$_COOKIE[COOKIE_NAME]."' ");
  29.  
  30. if($db->num_rows() == 1)
  31. {
  32.  
  33. $this -> restore();
  34. }
  35. else
  36. {
  37. $this -> create();
  38. }
  39. $this -> garbageCollector();
  40. $this -> lastTime();
  41.  
  42. } 
  43.  public function userId()
  44. {
  45. return $this->user_id;
  46. }
  47.  
  48. public function setUserId($user_id, $autologin)
  49. {
  50. global $db;
  51. $this ->user_id = $user_id;
  52. $db->query("UPDATE `sessions` SET `session_user_id` = '".$user_id."', `session_autologin` = '$autologin' WHERE`session_id` = '".$this->id."' "); 
  53.  
  54. //$this ->newId();
  55. }
  56.  
  57. private function create()
  58. {
  59. global $db;
  60.  
  61. // utworz nowa anonimowa sesje. Wczesniej usun stare z bazy
  62. $this -> id = sha1(uniqid(time().$this -> ip));
  63. //echo '<br />'.$this ->id.'-';
  64.  
  65. setcookie(COOKIE_NAME, $this -> id, time() + COOKIE_EXPIRE, '/', '.'.SKLEP_DOMENA);
  66. $db->query("DELETE FROM `sessions` WHERE `session_ip`= '".$this -> ip."'"); 
  67. $db->query("INSERT INTO `sessions` ( `session_id` , `session_user_id` , `session_ip` , `session_browser` , `ses
    sion_start` , `session_time` , `session_value` , `session_autologin` ) VALUES ('"
    .$this -> id."', '0', '".$this -> ip."', '".$this -> browser."', '".time()."' , '".time()."', NULL, 0 );");
  68. } // end create();
  69.  
  70. private function restore()
  71. {
  72. global $db;
  73.  
  74. $this->id = $_COOKIE[COOKIE_NAME];
  75.  
  76. $db->query("SELECT * FROM sessions WHERE session_id = '".$this -> id ."'");
  77. $row = $db->fetch_row();
  78.  
  79. $this -> values = stripslashes($row['session_value']); 
  80. $this -> user_id = stripslashes($row['session_user_id']); 
  81.  
  82. } // end restore();
  83.  
  84. private function lastTime()
  85. {
  86. global $db;
  87. setcookie(COOKIE_NAME, $this -> id, time() + COOKIE_EXPIRE, '/', '.'.SKLEP_DOMENA);
  88. $db->query("UPDATE `sessions` SET `session_time` = '".time()."' WHERE`session_id` = '".$this->id."' "); 
  89. $db->query("UPDATE `users` SET `user_lastvisit` = '".time()."' WHERE `user_id` = '".$this->user_id."' "); 
  90.  
  91.  
  92. } 
  93.  
  94. public function newId()
  95. {
  96. global $db;
  97.  
  98. $new_id = sha1(uniqid(time().$this -> ip));
  99.  
  100. setcookie(COOKIE_NAME, $new_id, time() + COOKIE_EXPIRE, '/', '.'.SKLEP_DOMENA);
  101.  
  102. $db->query("UPDATE `sessions` SET `session_id` = '".$new_id."' WHERE`session_id` = '".$this->id."' "); 
  103.  
  104. $this->id = $new_id;
  105.  
  106. } 
  107.  
  108. private function garbageCollector()
  109. {
  110. global $db;
  111.  
  112. $db->query("UPDATE `users` SET `user_lastvisit` = NOW( ) WHERE `user_id` = '".$this->user_id."' ");
  113. $db->query("UPDATE `sessions` SET session_user_id = 0 WHERE session_time < ".(time() - LOGIN_TIME). " AND `session_autologin` = 0 ");
  114. $db->query("SELECT * FROM sessions WHERE session_id = '".$this->id."'");
  115. $row = $db->fetch_row();
  116. //echo "SELECT * FROM sessions WHERE session_id = '".$this->id."'";
  117. $this->user_id = $row['session_user_id'];
  118. $db->query("DELETE FROM sessions WHERE session_time < '".(time() - COOKIE_EXPIRE). "'");
  119.  
  120. } // end garbageCollector();
  121.  
  122.  
  123.  
  124.  }
  125. ?>
wookieb
Na pierwszy rzut oka jest ok. A sprawdziłeś tą podstronę jak tam wygląda sesja? I gdzie zmienia się wartość?
propage
tutaj jest pokazany ten błąd
http://sandow.pl/bc/clip0003.avi

Teraz na http://sandow.pl/bc
ustawiłem print_r wartości z sesji
wookieb
Dziwnie to wygląda. Naprawdę dziwnie. Jeżeli możesz to usun session_save_handlera i zobacz jak to działa na normalnych sesjach. wtedy bedziesz wiedzial czy to wina session_handlera czy tez nie. Pokaz jeszcze kod odpowiedzialny za zmiane jezyka i moment w ktorym jest inicjowany jezyk na stronie.
propage
  1. <?php
  2. //$lan = $_SESSION['lan'];
  3. $lan = $session->lan ;
  4. if( empty($lan) ){
  5.  
  6. $sLang = getLanguage('en', array('pl' => 1, 'en' => 0.9));
  7. $session->lan = $sLang;
  8. //$_SESSION['lan'] = $sLang;
  9. }
  10. if(isset($_GET['lan']) && in_array($_GET['lan'], array('en', 'pl'))){
  11. $session->lan = $_GET['lan'];
  12. //$_SESSION['lan'] = $_GET['lan'];
  13. header("Location: <a href=\"http://sandow.pl/bc/");&#092;" target=\"_blank\">http://sandow.pl/bc/");</a>
  14. }
  15. $lan = $session->lan;
  16. //$lan = $_SESSION['lan'];
  17. ?>
wookieb
Kod
$sLang = getLanguage('en', array('pl' => 1, 'en' => 0.9));
echo 'TESTESTSETEST';
    $session->lan = $sLang;


I zobacz czy pobiera na nowo. Powstawiaj wlasnie takie echa i bedziesz wiedział która funkcja się wykonuje. Dzieki temu bedziesz wiedzial ktore parametry sie "resetuja" itd. I jeszcze raz radze na chwile używac $_SESSION smile.gif Tylko dla testu. Wiem, że to metoda dość "prymitywna" takie debugowanie ale przyznam się bez bicia, że jeszcze za bardzo nie wziąłem się za używanie debugerów.
propage
eh tylko ze u mnie działa wszystko poprawnie, nie mogę już męczyć klienta aby sprawdzał u siebie i przekazywał mi kolejne dane, u ciebie występuje ten błąd ?
wookieb
Tak. Ale tylko i wyłącznie na operze.
propage
wstawiłem tam echo 'if( empty($lan) ){<br/>';
ciężko szukać błędu jeśli się go nie widzi
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.