Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Optymalizacja metody write handlera sesji
Jarod
post
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Poniżej zamieszczam, metodę write() z mojego handlera sesji. Problem w tym, że najpierw następuje próba dodania nowego rekordu do bazy, a jeśli okaże się, że zwracany jest błąd = już taki identyfikator sesji został zapisany do bazy, to jest ona updejtowana. Próbowałem najpierw updejtować rekord a w przypadku wyrzucenia wyjątku wstawiać nowy, ale jeśli nastąpią 2 wywołania w ciągu 1 sekundy dla tego samego użytkownika (mało lecz prawdopodobne) to zwracany jest wyjątek. Dzieje się tak dlatego, że dwa wywołania w ciągu sekundy = brak nowych danych do zapisu i mysql zwraca 0 przetworzonych wierszy = dodanie nowego wpisu do bazy. Z tego też powodu musiałem na razie pozostać przy poniższym rozwiązaniu.. Poniższy sposób działa prawidłowo, ale przy większej aplikacji może wpłynąć na wydajność. A nawet jeśli nie wpłynie na wydajność to mało elegancko wygląda. Za każdym razem próbować dodawać nowy rekord tylko po to żeby stwierdzić czy rzeczywiście należy dodać nowy czy może tylko updejtować.. Macie jakiś pomysł jak to poprawić?

  1. <?php
  2. /**
  3.  * Metoda wywoływana przy każdej próbie zmiany lub dodania elementu do tablicy
  4.  * asocjacyjnej $_SESSION.
  5.  *
  6.  * @param string $sSessionIdentifier Identyfikator sesji
  7.  * @param string $sSessionValues Zserializowana reprezentacja tablicy $_SESSION
  8.  * @return bool
  9.  */
  10. public function write($sSessionIdentifier, $sSessionValues)
  11. {
  12. $this->sLastTime = date("Y-m-d G:i:s");
  13. $this->sSessionValues = $sSessionValues;
  14.  
  15. try
  16. {
  17. $aInsert = array('session_identifier' => $this->sSessionIdentifier, 'session_time_start' => $this->sTimeStart,
  18.  'session_last_time' => $this->sLastTime, 'address_ip' => $this->sAddressIP, 'login' => 'NULL',
  19.  'session_values' => $sSessionValues);
  20.  
  21. $this->oConnection->insert('sessions', $aInsert);
  22. }
  23. catch (MysqlException $e)
  24. {
  25. try
  26. {
  27. $aUpdate = array('session_last_time' => $this->sLastTime, 'session_values' => $this->sSessionValues);
  28.  
  29. $this->oConnection->update('sessions', $aUpdate, 'session_identifier = '' . $sSessionIdentifier . ''');
  30. }
  31. catch (MysqlException $e)
  32. {
  33. echo $e;
  34. }
  35. }
  36.  
  37. return true;
  38. }
  39. ?>


Ten post edytował J4r0d 23.02.2007, 21:46:34
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
DeyV
post
Post #2





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




MySQL?

Skorzystaj z REPLACE


Przenoszą temat na forum PHP
Go to the top of the page
+Quote Post
Jarod
post
Post #3





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Dzięki. Zapomniałem o replace. Zresztą nic lepszego się chyba nie wymyśli.

pozdrawiam
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: 23.08.2025 - 10:56