Wenn der Benutzer auf der Seite example.com erstmals eine Seite öffnet, erhält diese Seite eine ID. Diese ID muss der Server dann bei jedem folgenden POST (oder GET) erhalten. Sobald der Client die gleiche oder eine andere Seite in einem anderen Tab öffnet, muss diese auch eine neue ID erhalten.
Im Prinzip also ganz einfach, eine Session hat dann N verschiedene "Datensätze", jeweils einen pro Tab.
Das ist relativ einfach zu realisieren: Du packst in das Formular auf der Seite einfach ein hidden field mit dieser ID.
Wir die Seite initial abgerufen wird die ID erzeugt und in das Formular geschrieben. Bei jedem weiteren Post wird die ID automatisch mitgesendet.
Bei GET wird das schwieriger, hier muss die ID an jeden Link angefügt werden. Was passiert aber nun, wenn der User beim Link, der einen GET ausführt, Ctrl gedrückt hält und dieser Link mit der ID von Tab 1 auf einmal in Tab 2 geöffnet wird?