Достоверно - никак. Есть заголовки, которые отправляются браузерами. Их можно подделать (как и любые клиентские данные).
Один из этих заголовков - "User-Agent". Он же $_SERVER['HTTP_USER_AGENT']. Его, обычно, используют для определения устройства.
Вы зачем-то отбрасываете идею "передать с фронта fingerprint и сохранить его в сессию".
На клиенте доступ к устройству получить легче, чем гадать на сервере.