Even though *Session 2* fails to update with UPDATE 0 message, its txid is saved in xmax of updated(by *Session 1*) tuple.
As it becomes an old txid, how come new txids are able to view it?
The database can see everything. That is its job. It constructs the principles of ACID out of non-ACID components. But once you use pageinspect or select the system columns mxin and xmax, you start to peek through that illusion.