Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
498 views
in Technique[技术] by (71.8m points)

php - How to create "remember me checkbox" using Codeigniter session library?

in Codeigniter I am building an Authentication system for my web site and to achieve that I use session library

     session->set_userdata('username')

this will save the session -I believe- for some time

I want to provide a "remember me" checkbox in the login form so the user can save the session forever - could not find a way to save the session forever!?

Note:$sess_expiration will not work because it sets expiration date for all users and what I want to do is setting the expiration date based on his preferences

is that possible? and how to do it?

Thanks

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

If the remember me checkbox is checked you set a cookie on the user's system with a random string. E.g.:

$cookie = array(
    'name'   => 'remember_me_token',
    'value'  => 'Random string',
    'expire' => '1209600',  // Two weeks
    'domain' => '.your_domain.com',
    'path'   => '/'
);

set_cookie($cookie);

You also save this random string in the users table, e.g. in the column remember_me_token.

Now, when a user (who is not yet logged in) tries to access a page that requires authentication:

  • you check if there is a cookie by the name of remember_me token on his system
  • if it's there, you check the database if there is a record with the same value
  • if so, you recreate this user's session (this means they are logged in)
  • show the page they were visiting

If one of the requirements above is not met, you redirect them to the login page.

For security reasons you may want to renew the random remember_me_token every time the user logs in. You can also update the expiry date of the cookie every time the user logs in. This way he will stay logged in.

It would be too much work to write all the code for you, but I hope this helps you to implement this functionality yourself. Please comment if you have any questions. Good luck.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...