Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Podwójna inkrementacja wartości zmiennej
wnovak
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.04.2005

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


Witam,

Mam pewien problem z obsługą sesji. Otóż po zalogowaniu użytkownika chciałbym liczyć ilość otwartych przez niego stron. Mam napisaną klasę do obsługi sesji. Wszystko generalnie działa ok, nie przeładowuje żadnych funkcji do obsługi sesji. Po prostu w konstruktorze klasy wywołuje session_start(); i pobieram odpowiednie zserializowane tablice, zapisuje je w zmiennej składowej. W destruktorze mam funkcję serializujacą i zapisującą w sesji dane z obiektu. Klasa jest singletonem więc nie można utworzyć więcej jak jednego obiektu. Więc jeśli mam tą zmienną i ją inkrementuje to zamiast o 1 jej wartość zwiększa się o 2. Co jest najzabawniejsze, jeśli w testowym skrypcie na serwerze, po prostu wywołałem session_start() to ta wartość zwiększała się o 1, mimo iż w samym skrypcie nigdzie się do niej nie odnosiłem.
Klasa, trochę uproszczona zostawiłem tylko istotne fragmenty kodu
  1. class UserSession {
  2. private function __construct() {
  3. $this->getSession();
  4.  
  5. $this->_arUserVars['prevPages']++;
  6.  
  7. if ($this->_arUserVars['prevPages'] > 15) {
  8. //chce wykonać jakąś akcję
  9. $this->_arUserVars['prevPages'] = 0;
  10. }
  11. }
  12. }
  13. public function __destruct() {
  14. $_SESSION['sUser'] = serialize($this->_arUserVars);
  15. }
  16. private function getSession() {
  17. $this->_arUserVars = unserialize($_SESSION['sUser']);
  18. }
  19. }


Jeśli po zainicjowaniu całej sesji tą klasą w innym pliku wpiszę session_start(); print_r($_SESSION); - to 'prevPages' zapisany w sesji będzie się inkrementował, dlaczego?

Ktoś wie o co chodzi??
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Jakbyś pokazał więcej kodu...

Po pierwsze zawsze "zeruj" zmienne.
Go to the top of the page
+Quote Post
wnovak
post
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 24.04.2005

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


Tylko co więcej? W żadnym innym miejscu na chwile obecną nie korzystam z tej zmiennej.

przy deklaracji tablicy mam $this->_arUserVars = array();

co ciekawe z testowania wczoraj. jak odpalam ten skrypt nie includujący w żaden sposób klasy, zresztą cały plik test.php to
  1. print_r($_SESSION);

to tak jak wczoraj napisałem po odświeżaniu zmienna się sama inkrementuje, natomiast co ciekawe jak wpisze do konstruktora swojej klasy die(); to nagle w tym skrypcie sesja ginie. nie rozumiem jak to jest połączone??

[EDIT]

znalazłem winowajcę :] ale nie mam pomysłu jak to naprawić jeszcze (IMG:style_emoticons/default/smile.gif)

.htaccess

  1. RewriteEngine on
  2. RewriteBase /
  3.  
  4. RewriteCond %{REQUEST_FILENAME} !-f
  5. RewriteCond %{REQUEST_FILENAME} !-d
  6. RewriteRule ^images/avatar/([0-9]+)_([0-9]+)_x([0-9]+).(jpg|png)$ images/avatar/def_x$3.jpg [L]
  7.  
  8. RewriteCond %{REQUEST_FILENAME} !-f
  9. RewriteCond %{REQUEST_FILENAME} !-d
  10. RewriteRule ^(.+)?$ index.php [QSA,L]
  11.  


jeśli zakomentuję drugą regułę to wszystko z tą inkrementacją zaczyna działać dobrze, jak przerobić te reguły żeby wszystko dobrze działało??

Cały czas szukam rozwiązania, ale nie wiem czemu ta reguła wywołuje plik index.php dwa razy?? Sprawdziłem to już najprostszym skryptem poza budowaną przeze mnie aplikacją, przy odświeżeniu strony jej licznik zwiększa się dwa razy, nie tylko przy użyciu sesji, ale również gdy zapisuje go w pliku. W związku z tym wszystko wskazuje na tego .htaccessa Ma ktoś jakiś pomysł co tam jest źle?

[EDIT]

Chwilowo rozwiązałem to w taki sposób:
  1. RewriteRule ^[a-zA-Z0-9/]*$ index.php


jednak sposób jest taki trochę... jak ktoś wie jak to lepiej rozwiązać, to proszę o odpowiedź.

Chciałbym ponowić swoje pytanie, ponieważ dalej działam na tym rozwiązaniu tymczasowym.

Ten post edytował wnovak 24.08.2011, 07:57:53
Go to the top of the page
+Quote Post

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: 5.10.2025 - 14:19