日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Forms身份認證在IE11下無法保存Cookie的問題

ASP.NET中使用Forms身份認證常見的做法如下:

1. 網(wǎng)站根目錄下的Web.config添加authentication節(jié)點
復制代碼 代碼如下:
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)容:
復制代碼 代碼如下:
?xml version="1.0"?
configuration
system.web
authorization
allow roles="Admin" /
deny users="*" /
/authorization
/system.web
/configuration

這樣 , 用戶在沒有Forms認證的情況下訪問manager子目錄下的任何頁面均會自動跳轉(zhuǎn)到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 = https://www.rkxy.com.cn/dnjc/ticket.UserData;
if (userData =https://www.rkxy.com.cn/dnjc/="Admin")
{
// To do something
}
}

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

推薦閱讀