鍍金池/ 問答/PHP/ session和token是否可以2選一

session和token是否可以2選一

問題描述

總所周知小程序是沒cookie的 如何構(gòu)架比較好呢

問題出現(xiàn)的環(huán)境背景及自己嘗試過哪些方法

首次登陸 服務(wù)端生成session信息存用戶信息 同時(shí)返回一個(gè)session——id給小程序 小程序每次過來都攜帶上 查找
我在考慮是否還要返回一個(gè)token 這個(gè)token是自己加密的東西 每次訪問服務(wù)器都攜帶過來揭秘 但是這個(gè)不和session——id 重復(fù)了嘛 因?yàn)檫@2個(gè)效果都差不多的 還有一個(gè)這個(gè)過期時(shí)間要怎么考慮呢 一個(gè)是session過期時(shí)間 一個(gè)是小程序緩存過期時(shí)間 希望大神給點(diǎn)建議

相關(guān)代碼

// 請(qǐng)把代碼文本粘貼到下方(請(qǐng)勿用圖片代替代碼)

你期待的結(jié)果是什么?實(shí)際看到的錯(cuò)誤信息又是什么?

回答
編輯回答
避風(fēng)港

session在mvc的模式中好用,方便。缺點(diǎn)是客戶端必須支持cookie,而且session默認(rèn)過期時(shí)間就幾十分鐘。

前后端分離、手機(jī)app、小程序等,用token好,一份token到處運(yùn)行,放到緩存還是數(shù)據(jù)庫(kù)由你。
沒有代碼,參考 sso方案oauth2方案

2017年7月5日 14:53
編輯回答
淡墨

session是基于cookie的,如果cookie都沒有,更別說session了,除非你才用特殊配置才可以使用session,你可以直接才用token,在表中建立一個(gè)token字段,還有expires過期時(shí)間字段,問問題就解決了

2017年2月15日 21:35
編輯回答
風(fēng)畔

沒有接觸過小程序,所以對(duì)小程序的expire time不甚了解,至于session和token,session是占用服務(wù)器資源的,對(duì)于大量client的session存儲(chǔ),需要考慮內(nèi)存開銷,內(nèi)存異常(清洗、jvm宕機(jī)等),不過這個(gè)可以通過第三方緩存服務(wù)器來輔助解決,session有自己維護(hù)生命周期,session不支持跨應(yīng)用(每個(gè)client會(huì)產(chǎn)生不同的sessionId),當(dāng)然,你可以自己去實(shí)現(xiàn)服務(wù)器上session緩存池,然后不同應(yīng)用傳遞相同sessionId來達(dá)到所謂的跨應(yīng)用。而token(一般我使用JWT生成)是client持有,服務(wù)端不維護(hù)(如果你想維護(hù)的話,也可以,但一般沒這個(gè)必要),所以對(duì)于服務(wù)端內(nèi)存占用上就有所節(jié)省,token中也可以存儲(chǔ)自己想要的數(shù)據(jù),可以支持做相關(guān)登錄認(rèn)證、授權(quán)認(rèn)證等,token支持跨應(yīng)用(應(yīng)為服務(wù)端不管token是哪個(gè)應(yīng)用過來的,只驗(yàn)證是否成功),token自帶expire time,但本身不維護(hù)生命周期,所以一般token超時(shí)后,再使用的話,就會(huì)解析錯(cuò)誤,如果要維護(hù)生命周期,可以自己實(shí)現(xiàn),我一般都是加個(gè)refresh time。總的來說,session更適用WEB應(yīng)用系統(tǒng),token較適用APP應(yīng)用。

2018年1月19日 08:39