国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

IE11下Forms身份認(rèn)證無(wú)法保存Cookie的問(wèn)題

2019-11-17 01:31:07
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

IE11下Forms身份認(rèn)證無(wú)法保存Cookie的問(wèn)題

  asp.net中使用Forms身份認(rèn)證常見(jiàn)的做法如下:

1. 網(wǎng)站根目錄下的Web.config添加authentication節(jié)點(diǎn)

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

2. 在manager子目錄下添加Web.config文件并加入下面的內(nèi)容:

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

  這樣,用戶在沒(méi)有Forms認(rèn)證的情況下訪問(wèn)manager子目錄下的任何頁(yè)面均會(huì)自動(dòng)跳轉(zhuǎn)到manager/Login.aspx頁(yè)面。如果認(rèn)證成功,則會(huì)默認(rèn)回到manager/default.aspx頁(yè)面。認(rèn)證有效期為60分鐘。

3. 添加認(rèn)證代碼。登錄按鈕中添加下面的代碼:

if (!snCheckCode.CheckSN(txt_ValidateCode.Text)){    snCheckCode.Create();    Utility.ShowMessage("校驗(yàn)碼錯(cuò)誤!");    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("抱歉,該賬號(hào)被禁止登錄!");            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();}

  認(rèn)證成功后默認(rèn)會(huì)將用戶登錄信息以Cookie的形式存放到客戶端,有效期為60分鐘。UserData被設(shè)置為用戶的角色,在判斷用戶是否登錄時(shí)會(huì)用到。如下面的代碼:

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中運(yùn)行一切正常!但是將網(wǎng)站發(fā)布到服務(wù)器的IIS (可能會(huì)是較低版本的IIS,如IIS 6)后,發(fā)現(xiàn)登錄功能異常。輸入用戶名和密碼后點(diǎn)擊登錄按鈕,頁(yè)面postback但并不能正確跳轉(zhuǎn),嘗試手動(dòng)訪問(wèn)受保護(hù)的頁(yè)面會(huì)被自動(dòng)跳轉(zhuǎn)回登錄頁(yè)面。更奇怪的是該問(wèn)題只出現(xiàn)在IE11瀏覽器上,嘗試用FirefoxChrome訪問(wèn)登錄功能運(yùn)行正常。初步懷疑是IIS設(shè)置的問(wèn)題,可是IIS 6上并沒(méi)有與Cookie相關(guān)的設(shè)置,好像記得IIS 7上倒是有這個(gè)設(shè)置。但因?yàn)橹挥蠭E 11存在該問(wèn)題,所以可以否定代碼本身存在任何問(wèn)題。

  此外,還嘗試了降低IE 11的安全級(jí)別,重新安裝服務(wù)器上的.net framework以及下載最新的補(bǔ)丁等等,均不能解決問(wèn)題。后來(lái)發(fā)現(xiàn)其實(shí)只需要簡(jiǎn)單修改Web.config中authentication節(jié)點(diǎn)的設(shè)置就可以了,給forms添加cookieless="UseCookies"屬性即可。

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

  用以明確告訴服務(wù)器使用Cookie來(lái)保存用戶驗(yàn)證信息。問(wèn)題解決!


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 贵港市| 石柱| 鄂伦春自治旗| 岢岚县| 晋江市| 靖远县| 临海市| 太康县| 阜新市| 巴马| 德兴市| 辛集市| 探索| 沙坪坝区| 夏津县| 玛多县| 枣庄市| 德格县| 青田县| 利川市| 甘谷县| 襄汾县| 张掖市| 宜兰市| 平乡县| 思南县| 临高县| 韶关市| 洮南市| 温泉县| 内江市| 启东市| 科技| 东乌珠穆沁旗| 合作市| 葫芦岛市| 安陆市| 十堰市| 山东省| 荔波县| 广丰县|