Buenas,
En este caso siendo una web, se puede automatizar el acceso con selenium/phantomjs/casperjs/zombiejs,… Así que aunque tomes medidas haciendo cosas con javascript, simplemente se añade algo de complejidad, pero no afecta mucho a la dificultad para replicar un ataque.
La única forma de evitar un uso abusivo es implementando una política de "rate limiting" por usuario o por ip o por ambos, etc. Cada X peticiones en Y segundos se muestra una página de error o un captcha o fuerzas un delay en la respuesta para que el coste del ataque se haga exponencial con el paso del tiempo. Por si te sirve: un script para redis para implementar esto
http://evalsha.com/scripts/71927ba3cf040801b6a3b3d7081191d403c8d110
Lo que comentas del MD5 es una buena idea, pero es la misma idea que una cookie firmada. Mira a ver si en tu framework hay algo para "signed cookies". Una cookie firmada no es más que lo que comentas: los datos de autorización del usuario, fecha, o todo lo que quieras guardar y luego un hash (mejor que sea HMAC-SHA1/256). Con el hash evitas el "cookie poisoning". La ventaja de la cookie es que probablemente te facilite más el desarrollo ya que es un "token", pero estándar.
Saludos!