Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Różnica w działaniu skryptu
Forum PHP.pl > Forum > PHP
gothye
Witam

napisałem skrytp do zamieszczania ogłoszeń ,i jest w nim obsługa sesji gdzie dane są trzymane w SQL

i tak, na domowym serwerku (debian 5.0 , Apache2,php5) działa ok ,a na hostingu (suse) jest tak że rekord który trzeba ukatualnić o dane jest uaktualniony ale jednoczeście zostaje zdublowany tylko z innym numerem SID sesji ,sama obsługa w klasie wygląda tak :

  1. $this->SID = $this->GetConfig('SID') ? $this->GetCookie('SID') : $this->GetNewSID();
  2. $this->CheckSession($this->SID);
  3.  
  4.  
  5. FUNCTION CheckSession($sid)
  6. {
  7. $ValueSID = $this->SQL->fetch_assoc("SELECT sid,user,value,vdata FROM session WHERE sid=? AND (session_time > UNIX_TIMESTAMP(NOW())-?) LIMIT 1",array($sid,$this->Timeout));
  8. IF($this->SQL->affected_rows == 1)
  9. {
  10. $this->vData = unserialize($ValueSID['vdata']);
  11. IF(($this->vData['USER_ADDR'] == $this->UserIp) && ($this->vData['USER_BROWSER'] == $this->Browser))
  12. {
  13. $this->content = unserialize($ValueSID['value']);
  14. //$this->UserID = $ValueSID['user'];
  15. RETURN true ;
  16. }
  17. }else{
  18. $this->RemoveSession($sid);
  19. $this->CreateSession();
  20. }
  21. }
  22.  
  23. FUNCTION CreateSession()
  24. {
  25.  
  26. echo 'nowa' ;
  27. $this->SQL->query("INSERT INTO session (sid, session_time) VALUES (?,UNIX_TIMESTAMP(NOW())) ",array($this->SID));
  28. $this->SetCookies('SID',$this->SID);
  29. }
  30.  
  31. {
  32. $this->SQL->query("DELETE FROM session WHERE sid=? LIMIT 1",array($sid));
  33. $this->DelCookie('SID');
  34. $this->SID = $this->GetNewSID();
  35.  
  36. }
  37.  
  38.  



dla debugowania dodałem w create session echo 'nowa' i co jest najbardziej zaskakujące ,na chostingu oraz na serwerze w domku pokazuje się tylko raz (czyli tylko raz jest tworzony rekord w SQL ) to skąd mi sie dubluje w bazie ?

sprawdzałem na kilku przeglądarlach i to się dzieje tylko na operze (kilka wersji) ,nie mam już pomysłu sad.gif
kazikos
Miałem kiedyś bardzo podobny problem, okazało się, że w złym miejscu wstawiałem ob_end_flush i cała strona generowała się 2 razy (przez co widziałem tylko 1 var_dumpa). Jeżeli używasz ob_start("ob_gzhandler"); to problem może być w tym miejscu.
parzygnat
Zamiast echo zrób do testowania file_put_content() (czyli zapisywania do pliku) i będziesz miał pewność jak zachowuje się skrypt.
gothye
rzeczywiście uzuwam ob_start wygląda to w ten sposób że w pliku index mam

ob_start

wykonywany kod

inkludowane pliku 

ob_end 

parzygnat
Co dokładnie oznacza u Ciebie ten zapis?

sid=?
gothye
napisałem klase do SQL gdzie zapytania za nim zostaną wysłane przechodzą bindowanie ,coś jak w PDO ,co znacznie upraszcza pisanie
kazikos
Wrzuć ob_start() i ob_end() w komentarze w takim razie i zobacz czy problem z sesja nadal będzie się pojawiał.
gothye
niestety to samo po zachaszowaniu sad.gif

może to wina Suhosina na serwerze ?

parzygnat
Cytat
SELECT sid,user,value,vdata FROM session WHERE sid=? AND (session_time > UNIX_TIMESTAMP(NOW())-?) LIMIT 1


Ja bym błędu szukał w tym sid=? dałbym sid="?". Miałem takie przypadku że na różnych serwerach różnie jest to interpretowane.
Zapytanie może Ci zwrócić 0 i wtedy masz znowu tworzenie nowej sesji (wg Twojego algorytmu).
Może tez sprawdź co siedzi w affected_rows?
gothye
parzygnat dodawanie "" załatwia za mnie bindowanie w klasie winksmiley.jpg
parzygnat
a jak zrobisz cos takiego sid="'.?.'" ?
gothye
parzygnat - proszę nie chcę tłumaczyć czym jest bindowanie i jak działa ,posuzkaj sobie w google




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.