如何解決Forms身份認(rèn)證在IE11下無法保存Cookie的問題-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“如何解決Forms身份認(rèn)證在IE11下無法保存Cookie的問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何解決Forms身份認(rèn)證在IE11下無法保存Cookie的問題”吧!

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比延川網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式延川網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋延川地區(qū)。費(fèi)用合理售后完善,十載實體公司更值得信賴。

ASP.NET中使用Forms身份認(rèn)證常見的做法如下:

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


復(fù)制代碼 代碼如下:

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



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


復(fù)制代碼 代碼如下:

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



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

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


復(fù)制代碼 代碼如下:

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加密代碼:


復(fù)制代碼 代碼如下:

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)會將用戶登錄信息以Cookie的形式存放到客戶端,有效期為60分鐘。UserData被設(shè)置為用戶的角色,在判斷用戶是否登錄時會用到。如下面的代碼:


復(fù)制代碼 代碼如下:

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 (可能會是較低版本的IIS,如IIS 6)后,發(fā)現(xiàn)登錄功能異常。輸入用戶名和密碼后點擊登錄按鈕,頁面postback但并不能正確跳轉(zhuǎn),嘗試手動訪問受保護(hù)的頁面會被自動跳轉(zhuǎn)回登錄頁面。更奇怪的是該問題只出現(xiàn)在IE11瀏覽器上,嘗試用Firefox或Chrome訪問登錄功能運(yùn)行正常。初步懷疑是IIS設(shè)置的問題,可是IIS 6上并沒有與Cookie相關(guān)的設(shè)置,好像記得IIS 7上倒是有這個設(shè)置。但因為只有IE 11存在該問題,所以可以否定代碼本身存在任何問題。

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


復(fù)制代碼 代碼如下:

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



用以明確告訴服務(wù)器使用Cookie來保存用戶驗證信息。

到此,相信大家對“如何解決Forms身份認(rèn)證在IE11下無法保存Cookie的問題”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)建站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

本文名稱:如何解決Forms身份認(rèn)證在IE11下無法保存Cookie的問題-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://muchs.cn/article22/pcgjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、微信公眾號、全網(wǎng)營銷推廣網(wǎng)站內(nèi)鏈、商城網(wǎng)站、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站