The main difference is that the HttpSession is tied to the Web Tier, while a Stateful Session Bean is tied to the
EJB Tier. Therefore the Stateful Session Bean could be used to store state for any type of client, but the HttpSession can only store state for a web client.
I rarely find the need for Stateful Session Beans unless I need more transactional control and I am going to implement the SessionSynchronization.