為什么有些網(wǎng)站你打開(kāi)都不用輸入用戶(hù)名就可以是登錄狀態(tài),其實(shí)這就是自動(dòng)登錄,實(shí)現原理也很簡(jiǎn)單,檢查本地cookie,如果存在需要的用戶(hù)數據,根據這些數據檢查是不是自己的用戶(hù),如果是自己的用戶(hù),那么把用戶(hù)數據保存為session,則檢查session狀態(tài)就可以使用戶(hù)在登錄狀態(tài)。
通常的操作是這樣的,用戶(hù)登錄網(wǎng)站,填寫(xiě)自己的用戶(hù)名和密碼,如果勾選了自動(dòng)登錄的選項,那么服務(wù)器端要做什么處理呢?
- if( $this->input->post('autologin') == 'yes' ){
- $this->input->set_cookie('uid', $user_data['id'], 3600*24*7, '.xxx.com');
- $this->input->set_cookie('token', md5($user_data['id'].$this->user_data['password'].$this->config->config['sign_key']), 3600*12, '.xy.com');
- }
這段代碼表示當用戶(hù)勾選自動(dòng)登錄后寫(xiě)cookie,那么之后用戶(hù)再打開(kāi)網(wǎng)站的時(shí)候服務(wù)器就可以根據保存的cookie來(lái)自動(dòng)登陸了
- private function _doParseAutoLogin(){
- if(!$this->session->userdata('id')){ //用戶(hù)沒(méi)有登錄的時(shí)候檢查cookie
- $tmpUid = $this->input->cookie('uid');
- $tmpToken = $this->input->cookie('token'); //這兩個(gè)數據是之前用戶(hù)勾選自動(dòng)登錄操作的時(shí)候保存的
-
- if ($tmpUid && $tmpToken){
- $this->load->add_model_package_path(realpath("../www/application"));
- $this->load->model('user');
-
- $tmpRe = $this->user->get(intval($tmpUid));
- if (count($tmpRe) > 0 ){
- $tmpPassword = $tmpRe['password'];
-
- if ($tmpToken == md5($tmpUid.$tmpPassword.$this->config->config['sign_key'])){ //校驗cookie的正確性
- $user_array = array(
- 'login_ip' => $this->input->ip_address(),
- 'login_time' => time(),
- );
- $this->user->update($user_array, array('username' => $tmpRe['username'])); //更新本次操作的時(shí)間和ip
-
- $user_data = array(
- 'id' => $tmpRe['id'],
- 'fid' => $tmpRe['fid'],
- 'email' => $tmpRe['email'],
- 'mobile' => $tmpRe['mobile'],
- 'username' => $tmpRe['username'],
- 'regtime' => $tmpRe['create_time'],
- 'login_error_times' => 0
- );
-
- // Parse QQ and Sina Username.
- if (strpos($user_data['username'], '@') > 0){
- $user_data['username'] = $user_data['id'].substr($user_data['username'], strpos($user_data['username'], '@'));
- } //QQ登錄的用戶(hù)名展示方式
-
- $this->session->set_userdata($user_data); //用戶(hù)信息保存在服務(wù)器session中
-
- // Send login log.
- include_once('../udp/send_login.php');
- $tmpFrom = intval($tmpRe['app_id'])===0?'xxxx':$tmpRe['app_id'];
- $tmpRe = UserLoginSender::send_xxx_user_login($user_data['id'], 'all', $tmpFrom); //發(fā)送日志
- }
- }
- }
- }
- }
當用勾選自動(dòng)登錄時(shí)種下cookie,加載網(wǎng)頁(yè)時(shí)檢查cookie完成自動(dòng)登錄,就這么兩步。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。