本文转自:http://www.cnblogs.com/jaxu/p/3698377.html

ASP.NET中使用Forms身份认证常见的做法如下:

1. 网站根目录下的Web.config添加authentication节点

<authentication mode="Forms"><forms name="MyAuth" loginUrl="manager/Login.aspx" defaultUrl="manager/default.aspx" protection="All" timeout="60" /> </authentication>

2. 在manager子目录下添加Web.config文件并加入下面的内容:

<?xml version="1.0"?>
<configuration> <system.web> <authorization> <allow roles="Admin" /> <deny users="*" /> </authorization> </system.web> </configuration>

  这样,用户在没有Forms认证的情况下访问manager子目录下的任何页面均会自动跳转到manager/Login.aspx页面。如果认证成功,则会默认回到manager/default.aspx页面。认证有效期为60分钟。

3. 添加认证代码。登录按钮中添加下面的代码:

if (!snCheckCode.CheckSN(txt_ValidateCode.Text))
{snCheckCode.Create();Utility.ShowMessage("校验码错误!"); return; } string strUserName = txt_Username.Text.Trim(); string md5Pwd = Helper.MD5ForPHP(Helper.MD5ForPHP(txt_Password.Text)); lc_admin admin = null; bool logined = false; using (var context = new dbEntities()) { admin = context.tb_admin.Where(n => n.username == strUserName).FirstOrDefault(); if (admin != null) { if (admin.checkadmin != "true") { snCheckCode.Create(); Utility.ShowMessage("抱歉,该账号被禁止登录!"); return; } if (admin.password == md5Pwd) { // Update Admin Info admin.loginip = Request.UserHostAddress.ToString(); admin.logintime = CndingUtility.DateTimeToUnixTimeStamp(DateTime.Now); context.SaveChanges(); logined = true; } } } if (logined) { // Login FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( 1, admin.id.ToString(), DateTime.Now, DateTime.Now.AddMinutes(60), false, "Admin", FormsAuthentication.FormsCookiePath ); string hashTicket = FormsAuthentication.Encrypt(ticket); HttpCookie userCookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashTicket); HttpContext.Current.Response.Cookies.Add(userCookie); if (Request["ReturnUrl"] != null) { Response.Redirect(HttpUtility.HtmlDecode(Request["ReturnUrl"])); } else { Response.Redirect("/manager/default.aspx"); } } else { snCheckCode.Create(); CndingUtility.ShowMessage("用户名或密码不正确!"); }

MD5加密代码:

public static string MD5ForPHP(string stringToHash)
{var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[] emailBytes = Encoding.UTF8.GetBytes(stringToHash.ToLower()); byte[] hashedEmailBytes = md5.ComputeHash(emailBytes); StringBuilder sb = new StringBuilder(); foreach (var b in hashedEmailBytes) { sb.Append(b.ToString("x2").ToLower()); } return sb.ToString(); }

  认证成功后默认会将用户登录信息以Cookie的形式存放到客户端,有效期为60分钟。UserData被设置为用户的角色,在判断用户是否登录时会用到。如下面的代码:

if (HttpContext.Current.User.Identity.IsAuthenticated)
{int adminId = -1;FormsIdentity identity = (FormsIdentity)HttpContext.Current.User.Identity; FormsAuthenticationTicket ticket = identity.Ticket; string userData = ticket.UserData; if (userData == "Admin") { // To do something  } }

  上述代码在Visual Studio中运行一切正常!但是将网站发布到服务器的IIS (可能会是较低版本的IIS,如IIS 6)后,发现登录功能异常。输入用户名和密码后点击登录按钮,页面postback但并不能正确跳转,尝试手动访问受保护的页面会被自动跳转回登录页面。更奇怪的是该问题只出现在IE11浏览器上,尝试用Firefox或Chrome访问登录功能运行正常。初步怀疑是IIS设置的问题,可是IIS 6上并没有与Cookie相关的设置,好像记得IIS 7上倒是有这个设置。但因为只有IE 11存在该问题,所以可以否定代码本身存在任何问题。

  此外,还尝试了降低IE 11的安全级别,重新安装服务器上的.net framework以及下载最新的补丁等等,均不能解决问题。后来发现其实只需要简单修改Web.config中authentication节点的设置就可以了,给forms添加cookieless="UseCookies"属性即可。

<authentication mode="Forms"><forms name="MyAuth" cookieless="UseCookies" loginUrl="manager/Login.aspx" defaultUrl="manager/default.aspx" protection="All" timeout="60" /> </authentication>

  用以明确告诉服务器使用Cookie来保存用户验证信息。问题解决!

转载于:https://www.cnblogs.com/freeliver54/p/3948534.html

[转]IE11下Forms身份认证无法保存Cookie的问题相关推荐

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

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

  2. 分布式服务架构下的身份认证

    文章目录 前言 一.简单实用的认证技术-基于Session的认证 二.架构变迁引发的Session问题 1.客户端Cookie方案 2.Session复制方案 3.Session共享方案 三.分布式服 ...

  3. 微服务架构下的身份认证

    从单体应用架构到分布式应用架构再到微服务架构,应用的安全访问在不断的经受考验.为了适应架构的变化.需求的变化,身份认证与鉴权方案也在不断的变革.面对数十个甚至上百个微服务之间的调用,如何保证高效安全的 ...

  4. C# ASP.NET Forms身份认证

    原文:https://www.cnblogs.com/kyo-lynn/p/3418577.html 原文:https://www.cnblogs.com/fish-li/archive/2012/0 ...

  5. ASP.NET身份验证——Form身份认证

    细说ASP.NET Forms身份认证 用户登录是个很常见的业务需求,在ASP.NET中,这个过程被称为身份认证. 由于很常见,因此,我认为把这块内容整理出来,与大家分享应该是件有意义的事. 在开发A ...

  6. [转载]细说ASP.NET Windows身份认证

    细说ASP.NET Windows身份认证 阅读目录 开始 认识ASP.NET Windows身份认证 访问 Active Directory 在ASP.NET中访问Active Directory ...

  7. ASP.NET身份验证——Windows身份认证

    细说ASP.NET Windows身份认证 上篇博客我谈到了一些关于ASP.NET Forms身份认证方面的话题,这次的博客将主要介绍ASP.NET Windows身份认证. Forms身份认证虽然使 ...

  8. PHP-代码审计-身份认证

    当你的才华 还撑不起你的野心时 那你就应该静下心来学习 代码审计学习线上实验,都是CE一边实操,一边整理的笔记,方便以后翻看时,可快速查阅. 目录 身份认证漏洞 简介 cookie身份认证漏洞 see ...

  9. 【前端——Node.js】:身份认证

    一.前后端身份认证 1.web开发者模式 (1)服务端渲染的Web开发模式  (2)前后端分离的web开发模式 选择: 2.身份认证 身份认证:又称身份验证.鉴权,是指通过一定的手段,完成对用户的身份 ...

最新文章

  1. 成功解决cv2.imwrite(filename, img)代码输出中文文件乱码的问题(cv2.imencode方法解决)
  2. csc interview at cambridge
  3. android 中intent跳转是灰色的,没有效果,显示intent = null
  4. java 科学计数_Java和甜蜜的科学
  5. Android系统(2)---init.rc知识
  6. C++之找不到libboost_system.so.1.76库解决
  7. Cobbler详解(五)——cobbler常用命令
  8. 高等数学-空间解析几何与向量代数
  9. 基于Tablet pc 的墨迹手写识别输入法
  10. SAR图像滤波去噪效果评价研究
  11. unity3d 地面印花_Unity3D 中的贴花效果
  12. PS图片上传图片 同时生成微缩图
  13. IE浏览器下载中文文件,文件名乱码或变成下划线问题
  14. mfc切换office样式_VS2015下使用MFC操作Office(Word)
  15. 第一章 C语言编程(Ivor Horton)
  16. poi读取doc文档
  17. 计算机学报在线阅读,含指针程序的单子切片方法-计算机学报.pdf
  18. Robin六种常用负载均衡算法源码解析
  19. ds存储查看 linux,我的NAS我的地盘 篇五:群晖NAS软件介绍与应用之DS Audio篇
  20. Java卸载工具JavaUninstallTool

热门文章

  1. 点滴积累【C#】---操作文件
  2. 明晰软件架构与数据结构
  3. 让我吐血的一次重做系统
  4. WebSphere通过corba调Tuxedo问题(2)
  5. 苹果如果无法弹出⏏️
  6. <<science>> new and potential research areas
  7. Mac是大脑,iPad是四肢 如何实现的呢?右键而已
  8. 同时开左右两个SAPGUI编辑器显示同一段ABAP代码
  9. Kubernetes-dashboard安装
  10. 网站502与504错误分析