var user = new MgUserInformation(session);
var map = new MgMap(siteconnection);
I think that should work. I wrote up a class that handles the session, initializing the map, opening maps via layout/definition/etc.
I would recommend doing that rather then copying and pasting the above for every report.
You can stick MapGuideApi.MgInitializeWebTier() in Application_Start() in global.asax to avoid needing to call it every time a report is opened.
Also I would use the viewer API to refresh the map/legend. The server side functions don't work for the ajax viewer from what I have seen.
It should work. If you postback to the same page make sure that you store the session and mapname into a hidden field so subsequent requests also have the data. The session and mapname for the most part wont change until the user opens mg again or the session expires.