我在程序里加了一个成员变量
BOOL m_bLogin;
成功登录m_bLogin=TRUE;
否则=FALSE;
访问其它的url先判断if(!m_bLogin) {回首页!}
(所有的url都写在一个dll里)
可是只要有一个用户成功登录m_bLogin就变成TRUE;然后在其他的电脑输url也可以访问相应的内容,怎样解决这个问题??

解决方案 »

  1.   

    从实际应用的原理上来说,基本上很难!
    建议查查MSDN
      

  2.   

    能否使用类似asp的get方式给isapi传参数?如果不能是否有更好的替代方式?我觉得只能用post方式实在太麻烦了。
      

  3.   

    如果在禁用cookie的电脑上呢?先检测再提示用户开启吗?
      

  4.   

    用cookie
    如果关闭,只有和你说的一样重启动了,不知道可不可以强制修改
      

  5.   

    你搞清楚SESSION的原理,应该就可以实现了
      

  6.   

    用ISAPI Filter,控制所有的受限制的URL,我不明白怎么能直接输入URL进行绕过?
      

  7.   

    有两种方法:1,使用COOKIES有两种COOKIE,一种是有有效期的,这种COOKIE是保存在文本文件中的。
    另外一种是临时性的,跟随IE生命周期的COOKIE,用一般软件是无法查看到的。要检查验证,可以试试第一种COOKIE
    不过这种方法有漏洞,可以在客户端通过不正当方法修改这种cookie,从而达到跳过验证。
    唯一的补救办法就是在关键性的数据库操作时,重新从COOKIE读取数据,并重新验证。
    2,自己模拟一个SESSION过程,SESSION过程很简单,楼主可以在网上找一下SESSION的工作原理。
      

  8.   

    修正上面:
    可以试一下第二种COOKIE,也就是临时COOKIE,不过安全性也无法保证。推荐:自己模拟一个SESSION
      

  9.   

    不能这样写的,因为ISPAPI实际上是缓存在IIS的共享内存里的,所以单纯这样设一个变量TRUE不行,可能搂住还是用CGI的编程方式,CGI每增加一个用户就会开一个新的进程,拥有自己的独立内存堆和栈空间,而ISAPI只是在增加用户时多增加一个线程。在ISAPI中用cookie保存用户状态实际上和ASP没多大区别,因为ASP也是将一个临时值保存在COOKIE里,然后依靠SESSION保存这个临时值,根据选择的SESSION时间调整这个值,采用算法保证这个临时值不会理论上重复,所以说ASP安全性,还是SESSION谈不上比COOKIE安全一说,数安全还是采用SSL和数字证书了。关于模拟SESSION的说法,其实一样是采用保存COOKIE的方法,只是保存的时候要在Set-Cookie:UserId=12356789;UserPwd=xxxxx;path=/l;expires=Saturday.06-dec-2004 00:00:00 GMT ,先要将这里的关键的用户名,密码等等用一定的算法进行加密后在保存到Coolie中,特别重要的时候,应该设Cookie为临时不保存断线就失效。一个折衷的办法应该是在数据库中保存用户登陆的信息和时间,或者在服务器端保存用户的临时信息,但这会占用大量的服务器资源,但是可以安全达到目的。
      

  10.   

    isapi连这个简单的登陆认证都实现不了,还要他做什么??只能做查询了吧
      

  11.   

    偶是菜鸟,Amadalic你能拿出源代码给大家学习学习吗?
      

  12.   

    因为http协议本身就是无连接的,处理完一次请求服务器和客户端就断开了,所以默认情况下不可能知道用户是否已经登陆过了.但是为什么有时候可以知道用户登陆过了呢,是因为用户提交登陆页面的时候服务器端返回给客户端一个set-cookie的头,会发给客户端一个字串,而以后每次访问的时候浏览器都会把这个串作为cookie提交给服务器.这样服务器通过验证这个串是否合理来判断用户是否登陆过了.
    所以从这个角度来说如果浏览器不支持cookie的话那么也不能支持这种应用了.
    isapi没有现成的办法来帮你做这项工作,所以你可以自己来作,跟据用户登陆的时间,用户名等,生成一个加密的串,然后用AddHeader(pCtxt,"Set-Cookie: yourstring"); 把它加到给客户端的输出当中.
    以后用户再提交的话就通过检查头里面的串是否正确,当前时间和你记录的登陆时间(或者上次访问的时间) 是否满足你的需要.如果满足,就认为用户登陆过了.
    另外mfc给你自动生成的extensions类中的成员变量对于所有用户都是一样的.你在这里可以保存全局的设置之类的,而对于用户的信息,你需要保存到局部的结构或者类中,并且在调用各个函数的时候传递它的值或者指针另外isapi很难调试.呵呵
      

  13.   

    最好不要用ISAPI开发关键应用 很危险
      

  14.   

    看什么样的喽.有些很多数据要留在内存中的用isapi开发挺好的.
    但是比较难调试,而且一旦出错会导致整个网站都down掉
      

  15.   

    Amadalic你蛤蟆打哈欠,口气不小,只怕你是个没有什么真货色的冒牌货吧?你唬得了谁?
      

  16.   

    晕,怎么老走桃花运了,整天碰到你这个SB-Kingmsn(失落的文明),说不出个啥就一边待去,你知道“草本”这个字怎么写吗?
      

  17.   

    呵呵.
    3m2u(SameToYou)说得对你可以使用ie临时的cookie.这里并不要求保存cookie.所以不用担心客户端的Set-Cookie: name=test;btw,我还是建议用一个模拟的session管理模块
    你可以写一个专门维护session的后台程序,由isapi来读取.用户登录成功后就把session-id写入到set-cookie里,根据session-id来向维护session的后台程序要这个用户有关的session值就可以了.
      

  18.   

    Amadalic(飘飘) 是who啊?一点都不厚道
      

  19.   

    9731boy(发呆的上帝,其实,我不是随便的男人) ( ) 
    问个问题set-cookie设置的东西ie不会保存到硬盘上?关了ie以后就没有了?
    session是什么原理?像我说的发特征值放到set-cookie里,同时也放到服务器(小的临时文件或者数据库?)中吧
      

  20.   


    Amadalic 你失业时间太长了吧?骗人骗不长久滴,不要这么郁闷,小心吐血!
      

  21.   

    又是这个你这个pig头三,到处“装家”,那个公司找了你这个SB真是倒了八辈子霉了。典型的技术白吃天才妄想综合症,整天臭吹掌握了微软的核心技术,真的就做梦成了Bill Gates,起个Kingmsn--什么玩意,king-msn,MSN那天肯定起诉你这个白吃,不要打肿脸吓唬人了,公安局早就对你这个技术PZ备案了,大家千万不要听他妖言惑众,不要给他白吃白喝,千万不要借钱,千万不要轻易雇用他,千万要N(N>8)论面试,以前都是大意了,太大意了,只要它吹得能做的,一定要核实,他的工作经历都是假的,一定要核实N遍,不要让他拿个骗人的护照做身份,一定要身份证,如果年纪超过36千万别雇佣,八九成是IT界的败类,众位看官自己看好了,可真是血的教训啊!!!!现在如果在雇用的一定小心了,一周之内如果做不出一个VC++像样的程序,立马开了,不用被他从论坛抄的豆腐文章蒙骗了,如果他天天在骂Linux,JAVA,王志东,方兴东,SUN,BEA,IBM等等,肯定是很符合它的性质特征,整天臭吹和某个名人领导关系好,那是假的,请千万核实!谨记,小心使得万年船!!!
      

  22.   


    奇怪? Amadalic 你莫不是受了什么精神刺激有毛病啊?...没时间不谈技术不再奉陪!
      

  23.   


    "可是只要有一个用户成功登录m_bLogin就变成TRUE;然后在其他的电脑输url也可以访问相应的内容,怎样解决这个问题??"
    解决这个问题思路好象不对,就个人经验了说,只要是成功登录过的用户,由于在你的m_bLogin里已经变成了TRUE状态,所以直接调用URL还是可以访问已经成功访问过的内容。
    但对于没有通过第一次验证的用户相对是比较安全的,一般不会访问到你的被保护内容,这样的描述应该符合你碰到的情况。
    要解决该问题,还应该要跳出Cookie+Session的传统套路,因为单靠任何一个因数都是不可能解决你的问题的。建议从其他角度着手可能会更有效果。
      

  24.   

    以前工程碰到过这样实际的问题,可以通过[email protected]该问题进行深入探讨。
      

  25.   

    三种办法:1)用COOKIE 2)写在post hidden 变量之中 3)为extension类添加一个 CMap或stl::map 型的成员函数
      

  26.   

    to :3m2u(SameToYou):
    问个问题set-cookie设置的东西ie不会保存到硬盘上?关了ie以后就没有了?
    session是什么原理?像我说的发特征值放到set-cookie里,同时也放到服务器(小的临时文件或者数据库?)中吧
    ---Set-Cookei时,如果不指定失效时间,就不会写到硬盘上的.如果客户端不支持cookie,那你用jsp或asp之类也没有办法实现session的,你可以得到http的协议头看看就明白了session是根据客户端的的特征,生成一个唯一的标识,而后,可以通过维护这个标识来为这个客户端存取一些特别 的数据.当然了,你可以把数据写入到小文件或一些数据库里,但我是建议你专门写一个后台程序来维护.因为C/C++并不像java可以方便的序列化对象,所以C/C++的session一般只保存一些文本本的东西.
    如果是访问量比较大的话,你最好不要用小文件,这样千万的I/O的代价是很大的.
    你可以参考一下jsp的session规范.
    to Amadalic(飘飘) :呵呵.我才不是什么马甲呢.讨论问题就心平气和的,你们要吵架就到别的地方去吵架.