I was looking to do this a while back and was surprised to find no consistent ID I could get at across PCs.
Easiest option (if the the game is simple enough) is to do as Rev suggested. If your game is too complicated, or just demands server travel, or you have gone too far now anyway then as best I can tell you will need to do all the book-keeping yourself.
An outline for one such system:
Add some kind of Multiplayer ID
var in the game instance, default to 0
Add a Connected Clients Counter
var in there too, and maybe default to 2 (reserve 0 for invalid, and 1 for a server player) (never decrement this! It counts the number (+2) of clients who have connected in this session, not the number currently connected).
After a client connects, enter a ‘handshake’ type protocol exchange: client sends server a HELLO with its MultiplayerID (0 if it connecting to this server in an initial join), then If MutliplayerID == 0 the Server assigns a new id for the player (ConnectedClientsCounter++) and sends a HELLO back with the new ID, which the Client puts in its game instance to use for future handshakes (on server travels), Else (ID>0) the server (validates and) maps the ID received to the PC (and/or vice-versa), and can now use this ID<->PC mapping to correctly identify players between levels.
Whatever you were storing in login order (in an array?) you now store by ID (in a Map not an Array, there can be holes).