Złe podejście do tematu. Generalnie domyślna implementacja sesji w PHP jest dobra, ale dla celów edukacyjnych warto napisać własną - poczytaj o
session_set_save_handler, jak stworzysz odpowiednie funkcje i zlaczysz je w tej funkcji, możesz korzysta z własnej implementacji jak z domyślnej (operacje na $_SESSION, funkcje session_start(), session_destroy() etc.).
Po pierwsze, opierasz się na istniejącej sesji, zamiast stworzyć własną, co wprowadza niezły bajzel.
Po drugie, hashujesz hash (w 99% przypadków session_id() zwraca ci md5() jakiegoś pseudolosowego ciągu).
Po trzecie, tworzysz sztywne pola. We własnej implementacji najlepsze według mnie będzie struktura (taki pseudosql bo nie chce ci mieszac pewnych instrukcji dostępnych tylko w PgSQL):
Tabela sessions:
sessionid | unikalny ciąg w bazie o stałej ilości znaków, najlepiej hash losowego numeru, ten hash wysyłasz użytkownikowi w COOKIE
internalid | wewnętrzne id, klucz obcy do sessions_values(internalid), unikalny, AUTO_INCREMENT, TO wewnętrzne id którym posługujesz się w relacjach bazodanowych
useragent | przechowujesz useragenta którego będziesz sprawdział w funkcji open() sesji
ip | jak wyżej
lastaction | timestamp ostatniego żądania, jeżeli większy od obecnego o X sekund (proponowałbym 1800), niszczy sesje (a co za tym idzie dane sesyjne w pobocznej tabeli)
Tabela session_values:
internalid | już wyjaśnione
KEY | klucz danej sesyjnej, unikalny dla danego internalid (możesz dać w bazie klucz na internalid oraz KEY RAZEM lub sprawdzać z poziomu PHP)
value | wartość danej sesyjnej
Po czwarte, w miejscu ? chodziło pewnie o sprawdzenie czy funkcja zwraca 0 czy więcej rekordów.
mysql_num_rows.
We wspomnianej na początku funkcji zobacz "Example #2".
EDIT: 2^8 post ;]