There are several ways in which an EMP can check if a session has stopped.
ChargeDetailRecord (CDR)
The most certain way for an EMP to know if a session has stopped, is if you have received the ChargeDetailRecord (CDR). When the CPO pushes the CDR, you as an EMP can see that the session has ended. The CPO has 90 days to push the CDRs (in case errors occur). Usually it is pushed immediately after the session has been concluded. The CPO must always send the CDR as described by the protocol - also in cases when no energy has been consumed.
PullEVSEStatus
You could send a status pull request to see if a particular station is available, and then deduce from that if the session has ended or not. This will work as long as the station's dynamic status is delivered by the CPO (if the station is not offline).
Timeout
You could also implement a timeout according to plausibility checks, e.g. you think that a session would not last longer than a certain timeframe and then consider the session ended, or if the station switches to 'available' status again the session has ended.