No afirmo que sea un buen diseño... pero igual te lo dare:
Creas dos (2) tipos distintos de tablas de usuarios: 'usuarios' y 'usuarios_pv'. Vale... cuando muestras perfiles publicos, accedes a 'usuarios' y cuando accedes a los datos privados del propio usuario lo haces a 'usuarios_pv'
El ID de la tabla 'usuarios' es AUTOINC pero el de la tabla 'usuarios_pv' es generado aleatorio y obviamente es UNIQUE.
Como cuando muestras datos privados (link para cambiar contraseña, etc) los paginas se recorren por $_POST e inclusive valores de campos pueden guardarse en varialbes de $_SESSION, no tendras problema de que nadie pueda interceptar eso! O sea....
sino
Ves la diferencia ? cuando manejas datos privados no muestras NADA en la URL, a excepcion como mucho del nombre del controlador y/o la accion pero no muestras IDs ni nada