Looking into the code, a couple of things are happening.
First, the garbage collection routine is registered on the
wp hook, which isn't run on the back end unless you're doing a query. So refreshing the dashboard won't do anything.
wp_session_garbage_collection hook is scheduled to run twice daily. So while sessions are only valid for a certain period of time (~30 mins, unless you configure it otherwise) they stay in the database until the garbage collector runs.
You can verify that the scheduled event is in the Cron in a debug environment by:
WP_DEBUG to true
- Installing the Debug Bar plugin
- Installing Debug Bar Cron
You should see the
wp_session_garbage_collection event in the custom events section as in this screenshot: http://d.pr/i/YPLQ