移動端沒有session怎么處理


(轉:https://my.oschina.net/wanglihui/blog/150726)

手機客戶端與服務器端的通信,不同於瀏覽器與服務器端的通信。瀏覽器和服務器端的通信依靠session去維持一個會話, 當這一切搬到手機上仿佛一切都失效了。

1.在上一家公司的時候公司同事曾經問過我這個問題, 我當時想的解決辦法是通過將sessionID附加到網址后面,或者放到hearder頭中,維持會話。

2.或者干脆不維持會話,每次請求都通過簽名認證,調用接口,拿數據。當然這樣的效率肯定是最低的

3.到了新公司,看到google大牛推薦的一種方式。根據這種方式構建了一種類似於session的機制,一下主要是我的實現(有好的見解,歡迎噴~~):  

1.用戶表

mysql> desc auth_member;

+---------------------------+--------------+------+-----+---------+----------------+ 
| Field                     | Type         | Null | Key | Default | Extra          | 
 +---------------------------+--------------+------+-----+---------+----------------+ 
| id                        | int(11)      | NO   | PRI | NULL    | auto_increment | 
| username                  | varchar(50)  | YES  | UNI | NULL    |                | 
| password                  | varchar(50)  | YES  |     | NULL    |                | 
| realname                  | varchar(50)  | YES  |     | NULL    |                | 
| email                     | varchar(100) | YES  | UNI | NULL    |                | 
| registry_time             | datetime     | YES  |     | NULL    |                | 
| registry_ip               | varchar(50)  | YES  |     | NULL    |                | 
| last_login_time           | datetime     | YES  |     | NULL    |                | 
| update_time               | datetime     | YES  |     | NULL    |                | 
| last_password_update_time | datetime     | YES  |     | NULL    |                | 
| total_login_times         | int(11)      | YES  |     | NULL    |                | 
| avatar                    | varchar(255) | YES  |     | NULL    |                | 
| is_first_login            | int(11)      | YES  |     | NULL    |                | 
| delete_flag               | int(11)      | YES  |     | NULL    |                | 
 +---------------------------+--------------+------+-----+---------+----------------+ 

16 rows in set (0.00 sec)

2.token表

mysql> desc auth_log_token;
+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| id           | int(11)     | NO   | PRI | NULL    | auto_increment |
| uid          | int(11)     | YES  |     | NULL    |                |
| token        | varchar(50) | YES  |     | NULL    |                |
| create_time  | datetime    | YES  |     | NULL    |                |
| refresh_time | datetime    | YES  |     | NULL    |                |
| valid_time   | datetime    | YES  |     | NULL    |                |
| is_valid     | int(11)     | YES  |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
id 標識,uid用戶Id,token類似於session的唯一串根據一定算法聲稱,create_time生成時間,refresh_time 刷新時間,valid_time失效時間,is_valid是否失效  

運作:

1.用戶登錄: https://(請求)  username+password通過簽名認證, 獲取token,默認token有效時間可以根據用戶設置的記住密碼時間,或者默認30min

2.用戶通過接口獲取數據:用戶請求服務器接口需要攜帶token和username,通過判斷token是否有效,token和傳遞的用戶名是否匹配等,驗證token合法性

3.每次驗證token成功更新refresh-time字段,valid_time時間更新,增加token有效時間

4.如果要構造單點登錄,用戶每次登陸判斷token表中uid記錄是否存在,如果存在直接更新;如果構建多點登陸,用戶每次登陸,直接在token表中插入新記錄。用戶退出,直接將is_valid字段設為1(即已經失效),valid_time 設置為當前時間   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM