網(wǎng)站需要標示用戶登陸狀態(tài)時钉嘹,使用cookie便夠了;原則上蠢涝,我是反對使用session的玄呛。
直接把登陸用戶的ID寫入cookie,做為識別即可和二。但需要注意的是徘铝,這個cookie的值必須簽名或者是加密,防止偽造。
很多web框架庭砍,比方說django场晶,都有內(nèi)置的簽名cookie支持混埠,直接response.set_sign_cookie即可怠缸。
Asp.Net很多方面都挺優(yōu)秀的,但比較詭異的是钳宪,不論是System.Web命名空間下還是asp.net MVC貌似都沒提供相關(guān)的支持揭北。google了一圈,也沒發(fā)現(xiàn)啥好用的cookie實現(xiàn)吏颖。
well搔体,自己動手,豐衣足食半醉。
簽名這事可以很簡單疚俱,value + hex(md5(secret key + salt + value))
也是可以的。
但這是終歸涉及系統(tǒng)賬號安全缩多,還是使用業(yè)界通用的標準比較好呆奕。
那就移植Django的簽名實現(xiàn)吧,反正也沒多少代碼衬吆。
然后就有了:https://github.com/Wuvist/NDjangoSignCookie
直接nuget Install-Package NDjangoSignCookie
可用梁钾。
全部源碼加注視空行排版等一共126行,基本一次完成編碼并調(diào)試成功逊抡。
參考的是django 1.6.x版本的cookie簽名實現(xiàn)姆泻,但估計應該很多版本都是兼容的,這塊django應該不會怎么變動才對冒嫡。我就懶得去試的拇勃。
使用與Django完全一模一樣的簽名方法,實際上還順便解決了一個潛在需求:
asp.net子站與Django子站共享登陸
比方說孝凌, login.65dg.me 是用asp.net開發(fā)的方咆,.net這邊在用戶登陸后,用SetSignCookie(...)方法保存用戶id去.65dg.me
根域名下胎许。
然后峻呛, help.65dg.me 是用django開發(fā)的,它就可以直接使用request.get_sign_cookie(..)方法來獲得asp.net簽名的cookie辜窑,檢查用戶是否登陸钩述。
反過來,django端寫cookie穆碎,asp.net這邊讀也行牙勘。
當然,兩邊得配置使用相同的SECRET_KEY。
最后方面,做為一個前python粉絲放钦,我這次翻django源碼的時候,翻到:
https://github.com/django/django/blob/stable/1.6.x/django/utils/six.py
時恭金,真心只能一聲嘆息操禀。為了兼容python 2/3,晦澀横腿,又得寫一堆無聊的代碼……這種搞法颓屑,哪有什么開發(fā)效率可言?唉~