Сначала вы должны решить, как вы собираетесь сохранять состояние в браузере: собираетесь ли вы использовать файл cookie сеанса или передавать маркер сеанса на каждой странице?Если вы идете по пути cookie, вам не нужно менять свои страницы и формы, но вам нужно добавить управление cookie, если его еще нет (будьте осторожны, используя сеанс + httpOnly cookie)
Тогда выдолжен решить, как получить данные о состоянии на сервере: если вы уже используете базу данных, вы можете добавить таблицу «SESSION» со столбцами «SESSION_ID» и «EXPIRATION_DATE» + вторую таблицу с именем «SESSION_DATA» со столбцами »SESSION_ID "," KEY "," VALUE ".
Теперь вам «просто» нужно создать несколько простых функций:
int session_createNewSession(long& session_id, long duration)
int session_setValue(long session, char[] key, char[] value)
int session_getValue(long session, char[] key, char[] value)
int session_abandonSession(long session)
Эти функции будут возвращать коды ошибок, если сеанс не может быть создан или значение не может быть установлено / получено.Вам также, вероятно, следует создать задание, которое регулярно выполняется в базе данных для удаления старых сеансов.
Теперь, когда у вас установлена система сеансов, все остальное довольно просто:
- createформа входа в систему
- в вашем cgi обрабатывает полученные данные, проверяя, правильно ли введены логин / пароль (хотя не храните пароли в БД: сохраните соленый хеш)
- , если соединениевсе в порядке, сохраните идентификатор пользователя в сеансе (или в вашем случае вы можете просто сохранить значение «IsAdmin»)
Вы могли бы сделать на самом деле проще: просто session_createNewSession (long & session_id, int isAdmin) было бы достаточно в вашем случае (только с одной таблицей базы данных), но ваш клиент, вероятно, будет запрашивать больше функций с течением времени, не так ли?
И последнее замечание: будьте осторожны, чтобы идентификаторы session_id были случайными,не отступать поля, иначе было бы довольно просто перехватить чужую сессию.