I got a note in oracle tech net

A session will continue to show as idle even after the idle_time for that user, as specified in that user's profile, has expired. When the user attempts to run a transaction against the database after the idle_time has expired, the database will disconnect the user by terminating the session. After this, the session will no longer show in the output of the above query.