That would be difficult to achieve. It's browser feature. Only possible way could be to place/keep track of a tab by keeping a hidden value on the page and sending that across with every request to make sure it is for the same session.
Read more about it here in detail:
Stop Sharing Session State between Multiple Tabs of Browser[
^]
Easiest and ok-ok implementation (keeping disadvantages in check), following can be tried:
Manually generate unique page identification code and insert it into hidden field on every page.
<asp:HiddenField ID="PageID" runat="server" />
In the form load include following code. It will generate unique page identification code based on millisecond and other time component which always be unique for your site.
If Not IsPostaback Then
Dim R As New Random(DateTime.Now.Millisecond +
DateTime.Now.Second * 1000 +
DateTime.Now.Minute * 60000 +
DateTime.Now.Minute * 3600000)
PageID.Value = R.Next()
End If
So by this method you can identify each tab request as unique requests. But it has following two disadvantages.
First: The access of hidden element PageID is only when ViewState is restored on postback. So you cannot access PageID in page_init().
Second: As hidden field is accessible to the visitor, anyone can change PageID. So this solution will work only for environment with 100% trust ratio of all user.
UPDATE:
A good blog entry for same using Route:
Get an unique session in each browser tab[
^]