session inactive DOES NOT MEAN session is dead.
(probably only killed or not found session is really gone)

(Try to use sqlnet feature 'dead connection detection' to set timeout for oracle to marke session dead when client connection is dead.)

The issue here is that it is difficult to define what is dead session. One definition comes to timeout (like in sqlnet's dead connection feature), but then what has to be the timeout: too long is bad, but to small risks to produce wrong results.

So it is better to reduce UNEXPECTED session crashes or impact the crashes has on the system.
For example, if locking of resources by crashed sessions is a concern, then moving processes to PL/SQL at DBengine or to midle tire is a good option. A 7x24 project I am involved has no DML/COMMITS/ROLLBACKS at client app. at all - everything is done on server side - no problems because of dead client happens. There is a problem regarding locking of rows for update for concurent access by different users: try to minimize such issues if possible or provide some facilities to identify the locking session and allow to kill the dead session manually.