IE11下ASP.NET Forms身份认证无法保存Cookie的问题

折腾了三四天,今天才找到资料,解决了。

以下会转贴,还没来得及深究,先放着,有空再学习下。

  1. ASP.NET中使用Forms身份认证常见的做法如下:
  2.  
  3. . 网站根目录下的Web.config添加authentication节点
  4.  
  5. <authentication mode="Forms">
  6. <forms name="MyAuth" loginUrl="manager/Login.aspx" defaultUrl="manager/default.aspx" protection="All" timeout="" />
  7. </authentication>
  8. . manager子目录下添加Web.config文件并加入下面的内容:
  9.  
  10. <?xml version="1.0"?>
  11. <configuration>
  12. <system.web>
  13. <authorization>
  14. <allow roles="Admin" />
  15. <deny users="*" />
  16. </authorization>
  17. </system.web>
  18. </configuration>
  19.   这样,用户在没有Forms认证的情况下访问manager子目录下的任何页面均会自动跳转到manager/Login.aspx页面。如果认证成功,则会默认回到manager/default.aspx页面。认证有效期为60分钟。
  20.  
  21. . 添加认证代码。登录按钮中添加下面的代码:
  22.  
  23. if (!snCheckCode.CheckSN(txt_ValidateCode.Text))
  24. {
  25. snCheckCode.Create();
  26. Utility.ShowMessage("校验码错误!");
  27. return;
  28. }
  29.  
  30. string strUserName = txt_Username.Text.Trim();
  31. string md5Pwd = Helper.MD5ForPHP(Helper.MD5ForPHP(txt_Password.Text));
  32. lc_admin admin = null;
  33. bool logined = false;
  34.  
  35. using (var context = new dbEntities())
  36. {
  37. admin = context.tb_admin.Where(n => n.username == strUserName).FirstOrDefault();
  38.  
  39. if (admin != null)
  40. {
  41. if (admin.checkadmin != "true")
  42. {
  43. snCheckCode.Create();
  44. Utility.ShowMessage("抱歉,该账号被禁止登录!");
  45. return;
  46. }
  47.  
  48. if (admin.password == md5Pwd)
  49. {
  50. // Update Admin Info
  51. admin.loginip = Request.UserHostAddress.ToString();
  52. admin.logintime = CndingUtility.DateTimeToUnixTimeStamp(DateTime.Now);
  53. context.SaveChanges();
  54.  
  55. logined = true;
  56. }
  57. }
  58. }
  59.  
  60. if (logined)
  61. {
  62. // Login
  63. FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
  64. ,
  65. admin.id.ToString(),
  66. DateTime.Now,
  67. DateTime.Now.AddMinutes(),
  68. false,
  69. "Admin",
  70. FormsAuthentication.FormsCookiePath
  71. );
  72. string hashTicket = FormsAuthentication.Encrypt(ticket);
  73. HttpCookie userCookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashTicket);
  74. HttpContext.Current.Response.Cookies.Add(userCookie);
  75.  
  76. if (Request["ReturnUrl"] != null)
  77. {
  78. Response.Redirect(HttpUtility.HtmlDecode(Request["ReturnUrl"]));
  79. }
  80. else
  81. {
  82. Response.Redirect("/manager/default.aspx");
  83. }
  84. }
  85. else
  86. {
  87. snCheckCode.Create();
  88. CndingUtility.ShowMessage("用户名或密码不正确!");
  89. }
  90. MD5加密代码:
  91.  
  92. public static string MD5ForPHP(string stringToHash)
  93. {
  94. var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
  95. byte[] emailBytes = Encoding.UTF8.GetBytes(stringToHash.ToLower());
  96. byte[] hashedEmailBytes = md5.ComputeHash(emailBytes);
  97. StringBuilder sb = new StringBuilder();
  98. foreach (var b in hashedEmailBytes)
  99. {
  100. sb.Append(b.ToString("x2").ToLower());
  101. }
  102. return sb.ToString();
  103. }
  104.   认证成功后默认会将用户登录信息以Cookie的形式存放到客户端,有效期为60分钟。UserData被设置为用户的角色,在判断用户是否登录时会用到。如下面的代码:
  105.  
  106. if (HttpContext.Current.User.Identity.IsAuthenticated)
  107. {
  108. int adminId = -;
  109. FormsIdentity identity = (FormsIdentity)HttpContext.Current.User.Identity;
  110. FormsAuthenticationTicket ticket = identity.Ticket;
  111. string userData = ticket.UserData;
  112. if (userData == "Admin")
  113. {
  114. // To do something
  115. }
  116. }
  117.   上述代码在Visual Studio中运行一切正常!但是将网站发布到服务器的IIS (可能会是较低版本的IIS,如IIS )后,发现登录功能异常。输入用户名和密码后点击登录按钮,页面postback但并不能正确跳转,尝试手动访问受保护的页面会被自动跳转回登录页面。更奇怪的是该问题只出现在IE11浏览器上,尝试用FirefoxChrome访问登录功能运行正常。初步怀疑是IIS设置的问题,可是IIS 6上并没有与Cookie相关的设置,好像记得IIS 7上倒是有这个设置。但因为只有IE 11存在该问题,所以可以否定代码本身存在任何问题。
  118.  
  119.   此外,还尝试了降低IE 11的安全级别,重新安装服务器上的.net framework以及下载最新的补丁等等,均不能解决问题。后来发现其实只需要简单修改Web.configauthentication节点的设置就可以了,给forms添加cookieless="UseCookies"属性即可。
  120.  
  121. <authentication mode="Forms">
  122. <forms name="MyAuth" cookieless="UseCookies" loginUrl="manager/Login.aspx" defaultUrl="manager/default.aspx" protection="All" timeout="" />
  123. </authentication>
  124.   用以明确告诉服务器使用Cookie来保存用户验证信息。问题解决!

IE11下ASP.NET Forms身份认证无法保存Cookie的问题的更多相关文章

  1. IE11下Forms身份认证无法保存Cookie的问题

    ASP.NET中使用Forms身份认证常见的做法如下: 1. 网站根目录下的Web.config添加authentication节点 <authentication mode="For ...

  2. [转]IE11下Forms身份认证无法保存Cookie的问题

    本文转自:http://www.cnblogs.com/jaxu/p/3698377.html ASP.NET中使用Forms身份认证常见的做法如下: 1. 网站根目录下的Web.config添加au ...

  3. 细说ASP.NET Forms身份认证

    阅读目录 开始 ASP.NET身份认证基础 ASP.NET身份认证过程 如何实现登录与注销 保护受限制的页面 登录页不能正常显示的问题 认识Forms身份认证 理解Forms身份认证 实现自定义的身份 ...

  4. 简单的ASP.NET Forms身份认证

    读了几篇牛人的此方面的文章,自己也动手做了一下,就想有必要总结一下.当然我的文章质量自然不能与人家相比,只是写给从没有接触过这个知识点的朋友. 网站的身份认证我以前只知道session,偶然发现一些牛 ...

  5. 【转】权限管理学习 一、ASP.NET Forms身份认证

    [转]权限管理学习 一.ASP.NET Forms身份认证 说明:本文示例使用的VS2017和MVC5. 系统无论大小.牛逼或屌丝,一般都离不开注册.登录.那么接下来我们就来分析下用户身份认证. 简单 ...

  6. ASP.NET Forms身份认证详解

    ASP.NET身份认证基础 在开始今天的内容之前,我想有二个最基础的问题首先要明确: 1. 如何判断当前请求是一个已登录用户发起的? 2. 如何获取当前登录用户的登录名? 在标准的ASP.NET身份认 ...

  7. 细说ASP.NET Forms身份认证 别人写的不过很透彻就转来了以后用时再看

    阅读目录 开始 ASP.NET身份认证基础 ASP.NET身份认证过程 如何实现登录与注销 保护受限制的页面 登录页不能正常显示的问题 认识Forms身份认证 理解Forms身份认证 实现自定义的身份 ...

  8. 关于Asp.Net Forms身份认证

    Asp.Net管道式的构建个我们提供了通过IHttpMoudle来订阅管线事件来达到干预HTTP请求的目的,Asp.Net的身份认证正是通过此种方式来对请求来执行身份认证的,这篇文章仅仅谈论Forms ...

  9. 权限管理学习 一、ASP.NET Forms身份认证

    说明:本文示例使用的VS2017和MVC5. 系统无论大小.牛逼或屌丝,一般都离不开注册.登录.那么接下来我们就来分析下用户身份认证. 简单实现登录.注销 以前在学习.net的时候不知道什么Forms ...

随机推荐

  1. vi/vim使用进阶: 剑不离手 – quickfix

    转载:http://easwy.com/blog/archives/advanced-vim-skills-quickfix-mode/ 本节所用命令的帮助入口: :help quickfix :he ...

  2. 小白日记4:kali渗透测试之被动信息收集(三)--Shodan、Google

    搜索引擎 公司新闻动态 重要雇员信息 机密⽂文档 / 网络拓扑 用户名密码 目标系统软硬件技术架构一.Shodan Shodan只搜网络设备.很多设备并不应该接入互联网,却由于本地网络管理员的疏忽和懒 ...

  3. iOS之Xcode8 Auto Layout新特性

    目录 1.Incrementally Adopting Auto Layout 2.Design and Runtime Constraints 3.NSGridView 4.Layout Feedb ...

  4. iOS “获取验证码”按钮的倒计时功能

    iOS 的倒计时有多种实现细节,Cocoa Touch 为我们提供了 NSTimer 类和 GCD 的dispatch_source_set_timer方法去更加方便的使用计时器.我们也可以很容易的的 ...

  5. mongodb windows下的安装

    (1)上mongodb的官网下载windows版本的mongo的安装包,安装包是绿色版的解压出来就可以直接使用. (2)将解压出来的bin文件夹复制到c:\mongoDB下(c:\mongoDB这个文 ...

  6. 魔方阵算法及C语言实现

    1 魔方阵概念 填充的,每一行.每一列.对角线之和均相等的方阵,阶数n = 3,4,5….魔方阵也称为幻方阵. 例如三阶魔方阵为: 魔方阵有什么的规律呢? 魔方阵分为奇幻方和偶幻方.而偶幻方又分为是4 ...

  7. C#控制台程序 使用 Server.MapPath,

    (1)添加引用 System.Web. (2)在类中填写 using System.Web 命名空间. (3)写法为: System.Web.HttpContext.Current.Server.Ma ...

  8. cogs 餐巾 461(贪心)

    /*虽然这暴力剪了又剪 改了又改 还是初始的20分...*/ #include<iostream> #include<cstdio> #include<cstring&g ...

  9. c# 与 PHP中 SHA1加密结果不同解决方法

    那天在调试API的时候,发现用c#写的SHA1加密出来的结果和PHP中sha1()出来的不一样,找了半天的原因后来才弄出来 在调试微信接口的时候大多的帮助文档都是提供的是PHP的方法,所以在.net中 ...

  10. CSE(Corrupted State Exceptions) 严重异常处理办法

    原因分析 出现这个问题说明.NET版本至少是4.0,因为微软在.NET 4.0版本中更改了异常处理机制.微软认为catch(Exception)这种写法是不负责任的,程序员应该按照异常严重类别决定程序 ...