CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

关于Cookies Decrypt解密成 FormsAuthenticationTicket后取不到UserData的问题

楼主acha()2005-06-01 16:52:50 在 .NET技术 / ASP.NET 提问

爬了一下以前的相关贴子,回答不是不痛不痒就是半路结束.  
  这个问题很奇怪,我用VS.NET环境调试USERDATA是能取的,一切正常,后来我又在浏览器里打  
  http://localhost/web/   UserData也是能取得,但是打http://192.168.1.123/这个地址时就取不到了。。。非常郁闷。我怀疑我哪里配置的不对,但是自己有检查不出来,我把相关代码贴上,请高手指点。  
   
  Web.Config内容:  
   
  <?xml   version="1.0"   encoding="utf-8"   ?>  
  <configuration>  
   
  <appSettings>  
  <add   key="ConnectionString"   value="server=127.0.0.1;uid=sa;pwd=******;database=DB"   />  
  <add   key="DataDynamicsARLic"   value="DD,APN,10,C001511"   />  
          </appSettings>    
           
           
      <system.web>  
   
          <!--     动态调试编译  
                      设置   compilation   debug="true"   以启用   ASPX   调试。否则,将此值设置为  
                      false   将提高此应用程序的运行时性能。  
                      设置   compilation   debug="true"   以将调试符号(.pdb   信息)  
                      插入到编译页中。因为这将创建执行起来  
                      较慢的大文件,所以应该只在调试时将此值设置为   true,而在所有其他时候都设置为  
                      false。有关更多信息,请参考有关  
                      调试   ASP.NET   文件的文档。  
          -->  
          <compilation    
                    defaultLanguage="c#"  
                    debug="true"  
          />  
   
          <!--     自定义错误信息  
                      设置   customErrors   mode="On"   或   "RemoteOnly"   以启用自定义错误信息,或设置为   "Off"   以禁用自定义错误信息。    
                      为每个要处理的错误添加   <error>   标记。  
   
                      "On"   始终显示自定义(友好的)信息。  
                      "Off"   始终显示详细的   ASP.NET   错误信息。  
                      "RemoteOnly"   只对不在本地   Web   服务器上运行的  
                        用户显示自定义(友好的)信息。出于安全目的,建议使用此设置,以便    
                        不向远程客户端显示应用程序的详细信息。  
          -->  
          <customErrors    
          mode="RemoteOnly"    
          />    
   
          <!--     身份验证    
                      此节设置应用程序的身份验证策略。可能的模式是   "Windows"、    
                      "Forms"、   "Passport"   和   "None"  
   
                      "None"   不执行身份验证。    
                      "Windows"   IIS   根据应用程序的设置执行身份验证    
                          (基本、简要或集成   Windows)。在   IIS   中必须禁用匿名访问。  
                      "Forms"   您为用户提供一个输入凭据的自定义窗体(Web   页),然后    
                        在您的应用程序中验证他们的身份。用户凭据标记存储在   Cookie   中。  
                      "Passport"   身份验证是通过   Microsoft   的集中身份验证服务执行的,  
                        它为成员站点提供单独登录和核心配置文件服务。  
          -->  
          <authentication   mode="Forms">    
           
  <forms   name="******"   loginUrl="Login.aspx"   protection="All"   timeout="2160000"   path="/web/"/>  
           
          </authentication>  
   
  <!--     授权    
                        此节设置应用程序的授权策略。可以允许或拒绝不同的用户或角色访问  
                      应用程序资源。通配符:   "*"   表示任何人,"?"   表示匿名  
                      (未经身份验证的)用户。  
          -->  
   
          <authorization>  
                  <deny   users="?"   />   <!--   允许所有用户   -->  
                          <!--     <allow           users="[逗号分隔的用户列表]"  
                                                            roles="[逗号分隔的角色列表]"/>  
                                      <deny             users="[逗号分隔的用户列表]"  
                                                            roles="[逗号分隔的角色列表]"/>  
                          -->  
          </authorization>  
   
          <!--     应用程序级别跟踪记录  
                      应用程序级别跟踪为应用程序中的每一页启用跟踪日志输出。  
                      设置   trace   enabled="true"   可以启用应用程序跟踪记录。如果   pageOutput="true",则  
                      在每一页的底部显示跟踪信息。否则,可以通过浏览   Web   应用程序  
                        根目录中的   "trace.axd"   页来查看  
                      应用程序跟踪日志。  
          -->  
          <trace  
                  enabled="false"  
                  requestLimit="10"  
                  pageOutput="false"  
                  traceMode="SortByTime"  
  localOnly="true"  
          />  
   
          <!--     会话状态设置  
                      默认情况下,ASP.NET   使用   Cookie   来标识哪些请求属于特定的会话。  
                      如果   Cookie   不可用,则可以通过将会话标识符添加到   URL   来跟踪会话。  
                    若要禁用   Cookie,请设置   sessionState   cookieless="true"。  
          -->  
          <sessionState    
                          mode="InProc"  
                          stateConnectionString="tcpip=127.0.0.1:42424"  
                          sqlConnectionString="data   source=127.0.0.1;Trusted_Connection=yes"  
                          cookieless="false"    
                          timeout="20"    
          />  
   
          <!--     全球化  
                      此节设置应用程序的全球化设置。  
          -->  
          <globalization    
                          requestEncoding="gb2312"    
                          responseEncoding="gb2312"    
        />  
         
    </system.web>  
   
  </configuration>  
   
   
  Login.aspx.cs相关代码:  
   
  private   void   LoginBtn_Click(object   sender,   System.EventArgs   e)  
  {  
  UserInfo   user   =   BusinessFacade.User.SignIn(UserNameTbx.Text,   PasswordTbx.Text);  
  Response.Cookies.Add(new   HttpCookie(FormsAuthentication.FormsCookieName,   string.Empty));  
  if   (user   !=   null)  
  {  
  FormsAuthenticationTicket   ticket   =   new   FormsAuthenticationTicket(1,   UserNameTbx.Text,   DateTime.Now,   DateTime.Now.AddDays(1),   false,   user.Group.GroupName,   FormsAuthentication.FormsCookiePath);    
  string   encTicket   =   FormsAuthentication.Encrypt(ticket);  
  Response.Cookies.Add(new   HttpCookie(FormsAuthentication.FormsCookieName,   encTicket));  
  FormsAuthentication.RedirectFromLoginPage(UserNameTbx.Text,false);  
  }  
  else  
  {  
  StateLbl.Text   =   "您输入有误!";  
  }  
  }  
   
  取UserData的代码:  
   
  public   static   string   CheckUser   (HttpCookie   cookies)  
  {  
  FormsAuthenticationTicket   ticket   =   FormsAuthentication.Decrypt(cookies.Value);  
  string   UserType   =   ticket.UserData;  
  //string   UserType   =   ticket.Name;  
  return   UserType;  
  }  
   
  问题点数:80、回复次数:8Top

1 楼acha()回复于 2005-06-01 17:00:59 得分 0

upTop

2 楼fancyf(凡瑞)回复于 2005-06-01 17:03:18 得分 80

<forms   name="******"   loginUrl="Login.aspx"   protection="All"   timeout="2160000"   path="/web/"/>  
   
  cookie路径设置的时/web/,可用http://192.168.1.123/的时候取不到/web/下的cookie  
  把path改称"/"试试Top

3 楼acha()回复于 2005-06-01 17:13:42 得分 0

不好意思,打错了,是http://192.168.1.123/web/   这个地址,   把PATH改成"/"就连调试状态也不行了Top

4 楼fancyf(凡瑞)回复于 2005-06-01 18:34:45 得分 0

FormsAuthentication.RedirectFromLoginPage(UserNameTbx.Text,false);  
  这句话会自动写一个cookie,会把你前面写的cookie覆盖掉  
  既然你自己设置的cookie,就不要用这句话了Top

5 楼acha()回复于 2005-06-01 19:27:01 得分 0

谢谢,的确是这样,我用Response.Redirect()语句代替了FormsAuthentication.RedirectFromLoginPage()就正常了,但是舍弃了这个方法,每次登录后就只能转向一个页,比如我写了Response.Redirect("Default.aspx");而用户从非首页进入系统,自动跳转到登录界面,当登录成功后则自动回到首页,用了FormsAuthentication.RedirectFromLoginPage()则不然,他在登录后会自动转到用户请求进入的页面(非首页),如何做到两全其美?请高手继续指教!Top

6 楼fancyf(凡瑞)回复于 2005-06-01 19:31:58 得分 0

用FormsAuthentication.GetRedirectUrl获得这个URL,然后用Response.Redirect跳转Top

7 楼acha()回复于 2005-06-01 22:48:04 得分 0

谢谢,马上给分Top

8 楼fancyf(凡瑞)回复于 2005-06-01 23:06:58 得分 0

不客气:)Top

相关问题

  • 解密......
  • 解密
  • 获取FormsAuthenticationTicket 里UserData数据的问题
  • 加密解密程序为何在Debug和Release版本下效果不一样?Keywords:encrypt decrypt
  • 网上流传能够将已编码SP解密的工具sp_decrypt,在2005下似乎不能用了﹖
  • 怎样解密?
  • 解密Access2.0?
  • 破解密码!!
  • 如何解密?
  • 加密解密

关键词

  • 代码
  • formsauthentication
  • userdata
  • formsauthenticationticket
  • usernametbx
  • redirectfromloginpage
  • cookie
  • httpcookie
  • ticket
  • 登录

得分解答快速导航

  • 帖主:acha
  • fancyf

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo