Linking tables by referencing the primary key of the owning table (in this case, the user id in the user table) is the standard way of operating. As long as Fred can't impersonate Barry by tricking you into using Barry's ID to look up Fred's information.
Creating a hash won't be much help. It would certainly slow things down. Sure, user 214 might guess the existence of user 213, and if you used ID numbers supplied by users, then user 214 could give you "213"; if you then used the user-supplied number to look up information then 214 would get 213's information. But you don't do that anyway, do you?
Besides, a Session ID is already a random hash - one that is regenerated for each session without any need to depend on user ID or user name or what-have-you. Session data is not available to users - all they get is the session ID - unless you give it to them.