"select * from login where user='$usuario' and clave_usuario='$contrasena'"
Te devuelve resultados? Si la ejecutas en phpmyadmin que te da? Pq mysql_free_result() te dará ese warning en caso de que no encuentre recursos, si no encuentra recursos te dará un null y por tanto fallará y tu sentencia if (mysql_num_rows($rs)!=0) se cumplirá.
Ah y revisa los sql injection