我现在有两个asp.net web程序,分别在两个不同的IP地址中:
现在,我想实现两个web程序的一次性登录.我应该怎么做呢?现在我已经实现了在同一个IP地址下不同web程序间的一次性登录,但对于不同IP地址的不同web程序总是做不到.问题应该出现在以下方面:
1. 如果cookie路径设置为"/",则两个不同IP的web程序会产生不同名字的cookie,即无法实现一次性登录了.      <forms name="Teny" 
                   loginUrl="http://192.168.0.33/login.aspx"     
                   protection="All" 
                   timeout="30" 
                   path="MyPath" >   <!-- Path must have a compatible scope.-->
                   </forms>
        </authentication>我想将两个web程序都设置成Mypath,但我查看生成的cookie.前面都添加了IP地址前缀 ,使得另一个web程序无法得到另一个web程序生成的cookie.

解决方案 »

  1.   

    it is probably not simple as you would think, look into the resources in my bloghttp://blog.joycode.com/saucer/archive/2004/02/25/13789.aspx
      

  2.   

    把:  <!-- Path must have a compatible scope.-->
    去掉试一下
    Windows身份验证:
    <configuration>
       <system.web>
          <authentication mode = "Windows">
          </authentication> 
       </system.web>   
    </configuration>
    窗体身份验证:
    <configuration>
       <system.web>
          <authentication mode = "Forms">
          </authentication> 
       </system.web>   
    </configuration>
    护照身份验证:
    <configuration>
       <system.web>
          <authentication mode = "Passport">
          </authentication> 
       </system.web>   
    </configuration>
    自定义身份验证:
    <configuration>
       <system.web>
          <authentication mode = "None">
          </authentication> 
       </system.web>   
    </configuration>
      

  3.   

    个人觉得cookie等应用程序级的技术要解决楼主的需求还有点力不从心,何不写个专门验证用的webservice然后各个程序都去调用他验证呢?
      

  4.   

    经过一个星期的考虑,我做了一个这样的方案,大家评评看看怎么样:1.模型概述:一个验证中心(主要包括一个登录验证页面userlogin.aspx,一个确认登录页面checklogin.aspx)
    各个独立的.net程序,可能是在不同IP下的。2. 方案(采用Cookie作为信息保存方式):客户端页面需要进行验证时经过如下处理流程:
    1. 查看是否存在本客户程序的cookie。如果存在则正常访问,如果不存在,则访问checklogin.aspx页面。并传递本页本URL
    2. checklogin.aspx页面中检查是否存在验证中心cookie(此cookie保存在客户端,并加密).如果存在,则说明客户已经登录,则回一个加密字符串,在客户程序中解密得到USERNAME.不存在,则跳转到UserLogin.aspx页面,进行登录验证。
    3. 在userlogin.aspx页面中,用户登录后会产生一个保留在客户端一定时间的cookie,此cookie是用户是否已经登录的凭证。全部客户端都是通过查询验证中心的checklogin.aspx页面来查看用户是否登录。(总结: 各个不同IP的客户程序在初次访问时通过访问验证中心的checklogin.aspx页面确认用户是否已经登录,如果已经登录过,则通过之前保留的加密Cookie来得到用户信息,并通过附加QueryString 传递相关信息到客户程序,实现客户程序的自动登录)
    补充:这样做可以实现一处登录,各个子程序自动识别的需求,但存在一些缺点
    1. 就是验证中心的Cookie不是即时保存在内存中的,而是保存在客户硬盘上一段时间,如前一用户退出后,短时间内另一用户登录,则会自动登录到前一用户的帐号中去。
    2. 如果客户在一个客户程序中停留过长时间再次访问另一IP的客户程序时,由于验证中心的Cookie过期,则使得用户需要得新登录。还是有一些不科学。
    大家看看是否有更好的方法......(表达不好,又画不了图,将就吧............)
    在global.ascx文件的
    protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    事件中添加对于验证中心的验证页面的访问,如果