2013-04-15 3 views
0

내가 만들고있는 웹 사이트에 양식 인증을 사용하고 있으며 인증 쿠키를 삭제하거나 만료시킬 수 없다는 점을 제외하고는 제대로 작동합니다. 몇 가지 방법을 시도했지만 그 중 아무 것도 작동하지 않는 것 같습니다. 다음은 쿠키를 만드는 방법입니다.ASP.NET Formauthentication.Signout() not working

FormsAuthentication.SetAuthCookie(model.userName, false); 

        HttpCookie cookie = new HttpCookie("user"); 
        Response.Cookies["user"].Value = model.userName; 

이제 두 번째 쿠키는이 클라이언트의 요청에 따라 사이트의 내부 동작의 일부에 사용되는, 실제 authcookie 없습니다. 다음 부분은 쿠키를 삭제하려고 시도한 여러 가지 사항입니다.

FormsAuthentication.SignOut(); 
     Roles.DeleteCookie(); 
     Session.Clear(); 
     //Response.Cache.SetExpires(DateTime.Now); 
     //foreach (var cookie in Request.Cookies.AllKeys) 
     //{ 
     // Request.Cookies.Remove(cookie); 
     //} 
     //foreach (var cookie in Response.Cookies.AllKeys) 
     //{ 
     // Response.Cookies.Remove(cookie); 
     //} 
     //Session.Abandon(); 

     //// clear authentication cookie 
     HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, ""); 
     cookie1.Path = FormsAuthentication.FormsCookiePath; 
     cookie1.Expires = DateTime.Now.AddYears(-1); 
     Response.Cookies.Add(cookie1); 

     HttpCookie cookie = Request.Cookies["user"]; 
     string userName = cookie.Value; 
     cookie.Expires.AddDays(-30); 

     //HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", ""); 
     //cookie2.Expires = DateTime.Now.AddYears(-1); 
     //Response.Cookies.Add(cookie2); 

     //HttpCookie cookie = Request.Cookies["user"]; 
     //cookie.Expires = DateTime.Now.AddDays(-1d); 
     //HttpCookie user = Request.Cookies["user"]; 
     //role.Expires = DateTime.Now.AddDays(-1d); 
     //Response.Cookies["user"].Value = null; 
     Session.Abandon(); 

난 그냥 잘라 거기에 전체 일을 붙여, 그 중 일부는 현재 주석 있지만 일부 지점과 시간에 나는 쿠키를 제거하는 코드에서 각각의 방법을 사용하려고했습니다. 이러한 시도 중 일부는 제가 잠시 동안이 일을 해왔 기 때문에 추측이었습니다. 마지막으로 여기 내 web.config의 인증 섹션입니다.

<authentication mode="Forms" > 
    <forms loginUrl="~/login" timeout="90" name=".ASPXFORMS" /> 
</authentication> 

내가 잘못하고있는 것에 대한 의견을 보내 주시면 감사하겠습니다.

답변

0

시도 세션을 호출하기 전에

FormsAuthentication.SignOut() 

를 호출. 일반적으로 여러 곳에서 전화를 걸기 쉽도록 별도의 방법으로 배치합니다. 다음과 같은 내용 :

internal void SignOut(HttpContext context) 
{ 
    FormsAuthentication.SignOut(); 

    HttpSessionState session = context.Session; 

    if(session != null) 
    { 
      session.Abandon(); 
    } 
}