小论坛地址: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

解决方案 »

  1.   

    http://blog.csdn.net/rayyu1989/article/details/7522332
      

  2.   

    cookie空间是非常有限的。实际上保存一个后台数据库的id编号就行了,用不着在cookie中保存内容。例如购物车,你保存购物车编号就行了,而购物车内容是在数据库中持久化、在数据缓存系统中加速,根本用不着在客户端浏览器跟服务器之间来来回回地传送!
      

  3.   

    登录系统也是这样。登录时,你应该给用户发一张“通行证”,这张通行证指明了用户名,通行证有效期,用户所使用的应用系统(因为同一个用户可能用桌面与手机同时访问),最后一次刷新访问的时间、以及用户的权限(以便减少查找次数)等信息。cookie中只需要同行者编号,明文就好了,用不着加密。
      

  4.   


    调用方式里的 Console 要改成 Response
      

  5.   

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

  6.   

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

  7.   

    sessin 有的时候 访问不到!为什么呢
      

  8.   


    楼主要做登陆判断   不就是想在cookie中做个标识吗?  4楼说的存一个用户编号  不就可以标识是否登陆了吗?   不知我是否理解楼主的意思  呵呵
      

  9.   

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

  10.   

    其实需要时间戳。。如果改了密码。把时间更改下和cookie的时间比对,错误跳转到登录页面,重新登录
      

  11.   

    你也可以自己扩充下 把cookie放在url里的 
    不过我是在设计时候 舍弃了 禁用cookie的访问者
      

  12.   

    童鞋们提到的 密码修改后 要失效的问题 当时没有想到 个人认为 大致方向可以》》1. 每个用户生成1个xml 里面保存随机的几个字符 或者修改密码的时间戳也行》2. 在本实例的基础上 加1个字段 内容为 1中的若干字符 本实例在cookie写入15分钟后才会重新写入新的cookie;可以在重新写入cookie前 比对这几个若干字符是否匹配 用 StreamReader 即可》3. 以上不知 大家看懂了没有呢
      

  13.   

    怎么是VB啊,我还以为是C#的呢
      

  14.   

    》1. 每个用户生成1个xml 里面保存随机的几个字符 或者修改密码的时间戳也行这个在修改密码的时候生成就可以了
      

  15.   

    Session本质上就是Cookie, 通过一个Http-Only的Cookie保存服务器端Session的一个key
      

  16.   

    看了一下,setuser函数最后一个参数好像有问题。byte[] autocode = null“Error 1 不允许有默认参数说明符 C:\Documents and Settings\Administrator\桌面\WebSite1\App_Code\User.cs 194 91 C:\...\WebSite1\”
      

  17.   

    如果你的编译器不支持默认传参 建议自己修改setuser函数 把autocode 在参数中移除  始终当null处理
      

  18.   

    现在很多网站都要求cookie,可以抛弃那些禁用cookie的用户
      

  19.   

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

  20.   


    明显的不理解session的工作机制
      

  21.   

    能用文字说说你的思路吗???还有,为什么不用自带的forms身份验证呢??
      

  22.   

    一直不是很明白服务端怎么、何时验证cookie的
      

  23.   


    这位弟兄我确实没研究过Session的工作机制,也就是我文中的cookie具体怎么和后端session相匹配我是不懂,没想到被你看出来了。不过楼主涉及的问题是cookie被盗,我用xss攻击把正常用户的cookie盗了,楼主的代码里没体现怎么判断我是正常登录用户还是攻击者,这是楼主系统里存在的问题,没有涉及到session。
      

  24.   

    往Cookie写入一下自己生成的Guid(同时写入数据库与用户关联),当SessionId丢失时,查找Cookie存储的Guid在数据库中是否存在,如果存在,重建Session。这样可以一直保护在线。
      

  25.   

    既然你说sessionid保存在cookie里 这个id也是可转移的
    这个实例就是为了规避session 为什么还要用到session? 用了 这个实例还有他的用处吗?