The general rule of thumb is to create your own ping code - This handles all sorts of possible socket problems, such as zombie sessions.
I get the client to send a ping every 20 seconds, and node to check the array of client ping times every 35 seconds, if the age is over a certain time, the connection is terminated.
Additionally I employ a synchronous ajax request on the browser close event, to send a PHP instant goodbye event back to node.
This works on refresh and on closure of tabs. (stackoverflow has info on it somewhere, else i'll be happy to post the code)
-Chris