Non penso che intendesse "cattiva progettazione" tanto quanto "cattiva pratica". In linea generale, un'applicazione web dovrebbe essere apolide come concepibilmente possibile. Anche se, ad esempio, potrebbe essere necessario conoscere le informazioni dell'utente per autorizzare la visualizzazione delle pagine, tali informazioni potrebbero essere salvate sulla macchina client sotto forma di cookie e il server semplicemente convalida le informazioni dell'utente ogni volta.
Sarebbe l'ideale, ma non puoi sempre contare sul fatto che il cliente sia in grado di salvare i cookie. Inoltre, implica la convalida dell'utente in modo stateless, che potenzialmente implica l'interrogazione delle informazioni dal database per una semplice richiesta di pagina. Spesso è più semplice salvare tali informazioni nella sessione.
Tuttavia, una volta attraversato il Rubicon, molti programmatori sono tentati di salvare non solo le informazioni di autenticazione nella sessione ma anche molte altre cose. Questo è un anti-modello e tende a rendere la tua applicazione web strongmente dipendente dallo stato, che è esattamente ciò che doveva essere evitato in primo luogo.
Alcuni programmatori farebbero affidamento su una tecnologia come Spring (se stai usando Java) per districare ciò che altrimenti sarebbe un casino di dipendenze, ma direi che questo rende solo più facile creare dipendenze piuttosto che eliminarle. Tali tecnologie dovrebbero aiutare il tuo sviluppo, non rendere il tuo anti-modello meno un problema.
Pertanto, una buona regola è che se si può scrivere senza stato, è probabilmente una buona idea farlo o si rischia di cadere in questa trappola. Ovviamente ti imbatterai in situazioni in cui è necessario, ma in generale, dovresti solo salvare le informazioni che altrimenti sarebbero difficili da riacquistare.