а) Сервер выделяет отдельное пространство памяти для каждой обработки запроса. Следовательно, синглтон является синглтоном только в пределах одного запроса. Что касается постоянной связи (не знаю, какую именно вы имеете в виду), например, Постоянное соединение MySQL обрабатывается веб-сервером (например, Apache) - он повторно использует процессы (потоки) для последующих запросов, следовательно, он может передать соединение db следующему запросу. (По сути, постоянство и синглтон происходят на разных уровнях, отсюда и разные способности).
b) HTTP - это протокол без установления соединения сам по себе, и вы можете только имитировать постоянство, предполагая что-то (например, пинг Ajax запрашивается каждые 60 секунд, и когда пользователь не проявляет активности в течение более 60 секунд, вы можете предположить, что он сейчас отключен). Если вам нужно быть полностью уверенным, когда кто-то подключен, а когда нет, вам нужно искать сокетные соединения (например, Java-апплет). И даже это не гарантирует 100% результатов, поэтому тайм-ауты в соединениях были «изобретены».
в) Если вы ТОЛЬКО беспокоитесь по поводу перехвата сеанса, вам следует использовать SSL (https), и никто не сможет выяснить, что такое идентификатор сеанса (кроме самого пользователя, который ищет cookie в браузере, но он собирается похитить его собственную сессию?)