Cita: he visto que se utilizan urlencode pero yo utilzo el smarty en los templates y no he logrado encontrar una solucion,
urlencode() sólo "codifica" un URL al formato standard que define las normas del CGI (Conmun Gateway interface). No "encripta nada", sólo se usa para evitar problemas con caracteres como "ñ" .. o vocales acentuadas, espacios .. etc.
Por el problema principal, deberías gestionar "usuarios" en tu sistema bajo uso de
sesiones. De esta forma (por lo menos con el uso de sesiones) ya identificaras a tu usuario por ejemplo si ha de seguir alguna secuencia en su flujo de navegación: ejemplo .. que pase por "idmateria" 1 antes de llegar al 2 .. etc. O si se trata de "privilegios" que cierto usuario no vé tales "idmateria" .. también lo limitas ahí..
Un saludo,