Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony]Aktualnie zalogowani użytkownicy.
Valantir
post
Post #1





Grupa: Zarejestrowani
Postów: 93
Pomógł: 7
Dołączył: 6.09.2011
Skąd: Olsztyn

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


Witam, chciałbym zrobić moduł, który wyświetli mi listę zalogowanych użytkowników. (coś w stylu jak znajomi na facebooku czy nk). Zapisuję sesje do bazy danych:
Kod
storage:
    class: sfPDOSessionStorageOverride
    param:
      session_name: pracainz
      db_table:     session
      database:     propel
      db_id_col:    session_id
      db_data_col:  session_value
      db_time_col:  session_time


Nadpisałem metodę sessionWrite klasy sfPDOSessionStorage:

Kod
class sfPDOSessionStorageOverride extends sfPDOSessionStorage
{
    public function sessionWrite($id, $data)
    {
        // get table/column
        $db_table = $this->options['db_table'];
        $db_data_col = $this->options['db_data_col'];
        $db_id_col = $this->options['db_id_col'];
        $db_time_col = $this->options['db_time_col'];

        $db_user_id_col = 'user_id';
        $user = sfContext::getInstance()->getUser();
        $user_id = false;
        if ($user->isAuthenticated())
        {
            $user_id = $user->getGuardUser()->getId();
        }

        if ($user_id && ($user_id>0))
        {
            $sql = 'UPDATE '.$db_table.' SET '.$db_user_id_col.'= ?, '.$db_data_col.' = ?, '.$db_time_col.' = '.time().' WHERE '.$db_id_col.'= ?';
            try
            {
                $stmt = $this->db->prepare($sql);
                $stmt->bindParam(1, $user_id, PDO::PARAM_STR);
                $stmt->bindParam(2, $data, PDO::PARAM_STR);
                $stmt->bindParam(3, $id, PDO::PARAM_STR);
                $stmt->execute();
            }
            catch (PDOException $e)
            {
                throw new sfDatabaseException(sprintf('PDOException was thrown when trying to manipulate session data. Message: %s', $e->getMessage()));
            }

        }
        else
        {
            $sql = 'UPDATE '.$db_table.' SET '.$db_data_col.' = ?, '.$db_time_col.' = '.time().' WHERE '.$db_id_col.'= ?';
            try
            {
                $stmt = $this->db->prepare($sql);
                $stmt->bindParam(1, $data, PDO::PARAM_STR);
                $stmt->bindParam(2, $id, PDO::PARAM_STR);
                $stmt->execute();
            }
            catch (PDOException $e)
            {
                throw new sfDatabaseException(sprintf('PDOException was thrown when trying to manipulate session data. Message: %s', $e->getMessage()));
            }

        }

        return true;
    }
}

Dodałem kolumnę, która będzie przy sesji wpisywać id użytkownika, który się zalogował ale jest inny problem...
Otóż przy otwarciu strony z formularzem logowania sfGuardPlugin do bazy dodawany jest rekord. Np taki:
Cytat
8nnope4knm9l56p1brabjvt5c3 symfony/user/sfUser/lastRequest|i:1323421511;symfo... 1323421512 0

Następnie przy faktycznym zalogowaniu użytkownika na stronę tworzony jest kolejny rekord:
Cytat
epervhmgatp2t45rpc383u24j7 symfony/user/sfUser/lastRequest|i:1323421619;symfo... 1323421620 1

No i przy wylogowaniu jeszcze jeden rekord jest wstawiany do bazy:
Cytat
1rq7q4g4vb94doodenr7k45rc4 symfony/user/sfUser/lastRequest|i:1323421654;symfo... 1323421654 0

No i teraz pytanie. Jak zgrać to wszystko aby po wylogowaniu rekord danego użytkownika został skasowany a nie wpisywany nowy?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 23:05