session_unset();
session_destroy(); // Löschen der alten Sessionsession_name("sessionid");
session_start(); // Neue Session starten, um aktuell angezeigte Seite speichern zu können
Das ist unnötig. Es reicht völlig, wenn du die Daten in $_SESSION löschst, und ich vermute, dass sich dann auch dein Problem löst.
Die Kennung ändert sich prinzipbedingt immer erst von einem Aufruf zum nächsten, d.h. erst wenn sie vom Server zum Browser und dann wieder zum Server zurück kommt, kann man davon ausgehen, dass die Änderung auf allen Seiten vollzogen ist. Auch wenn ich auf den ersten Blick keinen Grund sehe, habe ich diese Eigenart in Verdacht, dein Problem auszulösen.
Von einer neu ausgewürfelten Kennung hast du jedenfalls nichts, eine alte ohne bzw. mit gelöschten Daten ist genauso gut wie eine frische, neue.
header("Location: http://".$_SERVER['SERVER_NAME'].linkzuid("login").my_sid(false));
Durch eine RewriteRule befindet sich die Session-ID beim Aufruf natürlich schon im Querystring, wo sie hingehört.
Wenn sie dahin gehört (was vollkommen richtig ist), warum wird sie dann erst vom Server dorthin befördert? Sich ändernde Parameter gehören immer in den, Überraschung, Parameterteil der URL, auch und gerade dann, wenn die URL von externen Stellen verarbeitet wird (hier: Browser).