In this instance you have to use cookieless sessions - in web.config in system.web
<sessionState mode="InProc" timeout="20" cookieless="UseUri" />
what this does is insert a session id into the url so you get something like, www.host.com/(abc15284dndhjkdm)/app.aspx. thisis then unique per tab and so the user can have uniqie session per tab.
Edit: - here is the code for the aspx pages i show at web3.adprs.net/test/test1.aspx i mention below
Test1.aspx
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="test1.aspx.vb" Inherits="WebApplication4.test1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server">
<title></title> </head>
<body>
<form id="form1" runat="server">
<div>
Enter User <asp:TextBox ID="user" runat="server"></asp:TextBox>
<asp:Button ID="go" runat="server" Text="Go" />
</div>
</form>
</body></html>
Test1.aspx.vb
Public Class test1
Inherits System.Web.UI.Page
Private Sub go_Click(sender As Object, e As System.EventArgs) Handles go.Click
Session("user") = user.Text
Response.Redirect("test2.aspx")
End Sub
End Class
Test2.aspx
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
Your user from session is <%=Session("user").ToString%>
</div>
</form>
</body>
</html>
web.config
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
<sessionState mode="InProc" timeout="20" cookieless="UseUri" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
HTH