美文网首页
Asp.Net与Django共享签名cookie

Asp.Net与Django共享签名cookie

作者: 玩家翁伟 | 来源:发表于2015-03-26 03:01 被阅读276次

网站需要标示用户登陆状态时,使用cookie便够了;原则上,我是反对使用session的。

直接把登陆用户的ID写入cookie,做为识别即可。但需要注意的是,这个cookie的值必须签名或者是加密,防止伪造。

很多web框架,比方说django,都有内置的签名cookie支持,直接response.set_sign_cookie即可。

Asp.Net很多方面都挺优秀的,但比较诡异的是,不论是System.Web命名空间下还是asp.net MVC貌似都没提供相关的支持。google了一圈,也没发现啥好用的cookie实现。

well,自己动手,丰衣足食。

签名这事可以很简单,value + hex(md5(secret key + salt + value))也是可以的。

但这是终归涉及系统账号安全,还是使用业界通用的标准比较好。

那就移植Django的签名实现吧,反正也没多少代码。

然后就有了:https://github.com/Wuvist/NDjangoSignCookie

直接nuget Install-Package NDjangoSignCookie可用。

全部源码加注视空行排版等一共126行,基本一次完成编码并调试成功。

参考的是django 1.6.x版本的cookie签名实现,但估计应该很多版本都是兼容的,这块django应该不会怎么变动才对。我就懒得去试的。

使用与Django完全一模一样的签名方法,实际上还顺便解决了一个潜在需求:

 asp.net子站与Django子站共享登陆

比方说, login.65dg.me 是用asp.net开发的,.net这边在用户登陆后,用SetSignCookie(...)方法保存用户id去.65dg.me根域名下。

然后, help.65dg.me 是用django开发的,它就可以直接使用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,晦涩,又得写一堆无聊的代码……这种搞法,哪有什么开发效率可言?唉~

相关文章

网友评论

      本文标题:Asp.Net与Django共享签名cookie

      本文链接:https://www.haomeiwen.com/subject/dcagxttx.html