Not sure why you can't use session in Global.asax - you just need to ensure you're calling it from the right place.
By default, there's very little in the Global.asax, but there are a number of methods you can implement if you want, and you'll probably want something along the lines of (tested locally):
void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
// Pick up your session id here, create a new context and away you go?
var sessionId = Session.SessionID;
Session.Add("sessionId", sessionId);
}
void Session_End(object sender, EventArgs e)
{
// Code that runs when a session ends.
// Note: The Session_End event is raised only when the sessionstate mode
// is set to InProc in the Web.config file. If session mode is set to StateServer
// or SQLServer, the event is not raised.
// Noting comment above, clean up your context if needs be.
}
Then in your site you can have something like:
protected void Page_Load(object sender, EventArgs e)
{
Literal1.Text = Session["sessionId"].ToString();
}
I'm not sure that Session is the right place for you to store this, and you'll want to do some performance testing to see if it's going to handle the sorts of loads you are expecting.