Independientemente de que es completamente inútil usar el user agent como validación al ser una variable entregada por el mismo navegador y que es sumamente facil manipular la idea es que se genere el token con el user agent en el momento que este inicia sesión, si el user agent cambia, es cuando te puedes percatar si la sesión cambio de navegador/cliente...
Cita: Al final validarás contra lo que está guardado en el Id de sesión que es el mismo para los dos, así que se saltará el token
No, en realidad validarás el hash generado por los user agent (el que se genero al iniciar sesión y que debe estar guardado como una variable de sesión contra el hash() generado con el user agent de cada petición), si en el user agent cambia 1 solo caracter el hash resultante con md5() será diferente, por lo tanto puedes estar seguro que algo cambio en el cliente...