使用加密cookie代替session验证用户登录状态 源码分享 欢迎拍砖

rayyu1989 2012-04-29 02:54:07
小论坛地址:http://rayyu.5d6d.com/thread-9444-1-1.html

正文:
首先 session 和 cache 拥有各自的优势而存在. 他们的优劣就不在这里讨论了.

以下类实现了 使用加密cookie代替session验证用户登录状态 支持 1小时/1周 有效期2种模式 (期间有新的请求则更新失效时间)

源码下载地址 http://www.370b.com/bbsx/cookie-login/cookie.rar

在自定义字符 CustomCode 不被知道的情况下 该加密过程是相对安全的.
你还可以更改其中 的 2处MD5哈希值 生成的方式、DEChar(ENChar)混淆字符 让代码更与众不同

欢迎大家拍砖
VB.NET调用方式:

Dim user As New Rayyu.User() '初始化用户信息(检测当前请求用户是否登录)
If user.Online Then
Console.Write("<br />name:" & user.Name & ",online:" & user.Online & ",id:" & user.ID)
End If


Dim user2 As New Rayyu.User(1, "用户名", False) '初始化(写入新用户)

C#调用代码

Rayyu.User user = new Rayyu.User();// 初始化用户信息(检测当前请求用户是否登录)
Rayyu.User user2 = new Rayyu.User(1, "用户名", false);// 初始化(写入新用户) false 表示1小时 true表示1周


if (user.Online)
{
Console.Write("<br />name:" + user.Name + ",online:" + user.Online + ",id:" + user.Id);
}


具体代码实在太长了 帖子不够 请移步blog:http://blog.csdn.net/rayyu1989/article/details/7522332
...全文
2990 88 打赏 收藏 转发到动态 举报
写回复
用AI写文章
88 条回复
切换为时间正序
请发表友善的回复…
发表回复
NONONO520 2012-05-26
  • 打赏
  • 举报
回复
往Cookie写入一下自己生成的Guid(同时写入数据库与用户关联),当SessionId丢失时,查找Cookie存储的Guid在数据库中是否存在,如果存在,重建Session。

这样可以一直保护在线。
zzxnsd 2012-05-26
  • 打赏
  • 举报
回复
[Quote=引用 83 楼 的回复:]

引用 82 楼 的回复:

楼主这套东西没考虑cookie被盗的情况,没有安全性可言。正常的身份验证系统,每次登录都生成一个不一样的经过加密的cookie,与后端session相匹配。后端session过期后,前端cookie也就无效了,以此缓解攻击。当然还包括楼上说的把cookie设置为http-only来缓解xss攻击。反正你这个肯定不行,别浪费时间了。


明显的不理解sess……
[/Quote]

这位弟兄我确实没研究过Session的工作机制,也就是我文中的cookie具体怎么和后端session相匹配我是不懂,没想到被你看出来了。不过楼主涉及的问题是cookie被盗,我用xss攻击把正常用户的cookie盗了,楼主的代码里没体现怎么判断我是正常登录用户还是攻击者,这是楼主系统里存在的问题,没有涉及到session。
rayyu1989 2012-05-26
  • 打赏
  • 举报
回复
既然你说sessionid保存在cookie里 这个id也是可转移的
这个实例就是为了规避session 为什么还要用到session? 用了 这个实例还有他的用处吗?
[Quote=引用 86 楼 的回复:]

引用 83 楼 的回复:

引用 82 楼 的回复:

楼主这套东西没考虑cookie被盗的情况,没有安全性可言。正常的身份验证系统,每次登录都生成一个不一样的经过加密的cookie,与后端session相匹配。后端session过期后,前端cookie也就无效了,以此缓解攻击。当然还包括楼上说的把cookie设置为http-only来缓解xss攻击。反正你这个肯定不行,别浪费时间了……
[/Quote]
zzxnsd 2012-05-25
  • 打赏
  • 举报
回复
楼主这套东西没考虑cookie被盗的情况,没有安全性可言。正常的身份验证系统,每次登录都生成一个不一样的经过加密的cookie,与后端session相匹配。后端session过期后,前端cookie也就无效了,以此缓解攻击。当然还包括楼上说的把cookie设置为http-only来缓解xss攻击。反正你这个肯定不行,别浪费时间了。
qingYun1029 2012-05-25
  • 打赏
  • 举报
回复
一直不是很明白服务端怎么、何时验证cookie的。。。
qingYun1029 2012-05-25
  • 打赏
  • 举报
回复
能用文字说说你的思路吗???

还有,为什么不用自带的forms身份验证呢??

种草德鲁伊 2012-05-25
  • 打赏
  • 举报
回复
[Quote=引用 82 楼 的回复:]

楼主这套东西没考虑cookie被盗的情况,没有安全性可言。正常的身份验证系统,每次登录都生成一个不一样的经过加密的cookie,与后端session相匹配。后端session过期后,前端cookie也就无效了,以此缓解攻击。当然还包括楼上说的把cookie设置为http-only来缓解xss攻击。反正你这个肯定不行,别浪费时间了。
[/Quote]

明显的不理解session的工作机制
小昌 2012-05-24
  • 打赏
  • 举报
回复
LZ气血方刚,有木有。
henrycomein 2012-05-24
  • 打赏
  • 举报
回复
现在很多网站都要求cookie,可以抛弃那些禁用cookie的用户
a526632368 2012-05-24
  • 打赏
  • 举报
回复
是用他来实现登录判断哦 请看完好嘛
wushanf53 2012-05-24
  • 打赏
  • 举报
回复
哈哈 这个函数是有点问题 但是我不知道怎么解决 哈哈 自己加油
ssd189 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 的回复:]

SESSION还在的 会把sessionID放在URL里面作为querystring 服务器获取到之后再在处理管道中把这个sessionID拿掉返回正常的URL
引用 29 楼 的回复:

引用 24 楼 的回复:

客户端禁用cookie了这种方式就毁了喔.! 呵呵



session不一样也毁了?
[/Quote]

什么乱七八糟的, 别强词夺理了.
havesk 2012-05-23
  • 打赏
  • 举报
回复
对cookie的解释不错
CodeProject-Jerry 2012-05-23
  • 打赏
  • 举报
回复
Session本质上就是Cookie, 通过一个Http-Only的Cookie保存服务器端Session的一个key
blackkettle 2012-05-23
  • 打赏
  • 举报
回复
看大家的评论才是件很爽的事情
Delta 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

支持!
[/Quote]。。。。。。。。。。。。。
anzhiqiang_touzi 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
cookie空间是非常有限的。

实际上保存一个后台数据库的id编号就行了,用不着在cookie中保存内容。例如购物车,你保存购物车编号就行了,而购物车内容是在数据库中持久化、在数据缓存系统中加速,根本用不着在客户端浏览器跟服务器之间来来回回地传送!
[/Quote]
rayyu1989 2012-05-23
  • 打赏
  • 举报
回复
如果你的编译器不支持默认传参 建议自己修改setuser函数 把autocode 在参数中移除 始终当null处理[Quote=引用 71 楼 的回复:]

看了一下,setuser函数最后一个参数好像有问题。

byte[] autocode = null

“Error 1 不允许有默认参数说明符 C:\Documents and Settings\Administrator\桌面\WebSite1\App_Code\User.cs 194 91 C:\...\WebSite1\”
[/Quote]
rayyu1989 2012-05-23
  • 打赏
  • 举报
回复
是下载的压缩包里的项目打开提示错误吗[Quote=引用 71 楼 的回复:]

看了一下,setuser函数最后一个参数好像有问题。

byte[] autocode = null

“Error 1 不允许有默认参数说明符 C:\Documents and Settings\Administrator\桌面\WebSite1\App_Code\User.cs 194 91 C:\...\WebSite1\”
[/Quote]
qingYun1029 2012-05-23
  • 打赏
  • 举报
回复
看了一下,setuser函数最后一个参数好像有问题。

byte[] autocode = null

“Error 1 不允许有默认参数说明符 C:\Documents and Settings\Administrator\桌面\WebSite1\App_Code\User.cs 194 91 C:\...\WebSite1\”
加载更多回复(42)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧