In Request scope, the data is destroyed at the end of each request and has to be re-created when the next request is made. This can be a problem when doing postbacks, especially when using things like datatables, because the tablemodel that maintains the cursor for iterating through the data rows is destroyed, as is the datamodel itself.
In Session scope, the data is retained between requests, so that's not a problem.
These two scopes are an integral part of
J2EE and have been for years.
Session scope, however, is basically forever - or at least until the session scope object is detached from the HttpSession object (or the session is destroyed). Since JSF doesn't really support destruction of scope objects, that means that you can end up with a lot of objects cluttering up your app environment and wasting resources.
In JSF2, the View scope was added. Unlike Request and Session scopes, it's not directly provided by the J2EE server. Instead, it's a session object with a built-in destruct mechanism that removes the object from the session once you transfer to another View.