BigBoobsMan
New Member
I was reading this answer about how /why/why not should I implement "remember me" option.However I'm more interested in this section\[quote\] If you DO decide to implement persistent login cookies, this is how you do it\[/quote\]why ?
- I want to know how to do it properly
- Big sites like Facebook are doing it , and I want to implement it also.
- The cookie should consist of the user's username, followed by a separator character, followed by some large random number (128 bits seems mind-bogglingly large enough to be acceptable).
- The server keeps a table of number->username associations, which is looked up to verify the validity of the cookie. If the cookie supplies a random number and username that are mapped to each other in the table, the login is accepted.
- At any time, a username may be mapped to several such numbers. Also, while incredibly unlikely, it does not matter if two usernames are mapped to the same random number.
- A persistent cookie is good for a single login. When authentication is confirmed, the random number used to log in is invalidated and a brand new cookie assigned.
- The server need not make the effort of deliberately trying to avoid re-assigning random numbers that have been used before: the chance of it happening is so low that even if it did, nobody would know to make use of it.
- When a user logs out through some deliberate logout function, their current cookie number is also invalidated. The user also has an option somewhere to clear all persistent logins being remembered by the system, just in case.
- Periodically, the database is purged of associations older than a certain time-period (three months, perhaps: the size of the table would be far more an issue than any possibilities of collision in a 128 bit random space).
- The following user functions must not be reachable through a cookie-based login, but only through the typing of a valid password:
- Changing the user's password
- Changing the user's email address (especially if email-based password recovery is used)
- Any access to the user's address, payment details or financial informationAny ability to make a purchaseResults
- Access sensitive user information
- Spend the user's money
- Recover the user's password and try it on other sites
- Prevent the user from receiving notifications from the site of things that may have been done in their name
- Share the stolen login with others