1

ASP.NET フォーム認証を使用した Web サイトがあります。最近、ユーザーのログイン時に Cookie を保存するように実装しましたが、問題が見つかりました。問題が以前に解決されたかどうかにかかわらず、私は 100% ではありません。

再現する手順は次のとおりです。

  1. www (www.mysite.com) で私の Web サイトにアクセスします。
  2. ウェブサイトにログインします。
  3. www なしの Web サイト (mysite.com) に移動します。
  4. もう一度ログインするように求められるので、ログインしました。
  5. ウェブサイトからログアウトします。ログインページにリダイレクトされます。
  6. アドレスバーに www.mysite.com と入力すると、まだログインしていることがわかりました。

したがって、(www) の有無にかかわらず、私の Web サイトにアクセスすると、2 つの異なる Web サイトにアクセスするようになります。www.mysite.com からログアウトしても、mysite.com からはログアウトされません。ログインと同じで、その逆も同様です。

ログインページ

    Login1_Authenticate Handles Login1.Authenticate

     Dim result As Boolean = UserLogin(userName, password)
     If (result) Then
        e.Authenticated = True
        If Login1.RememberMeSet = True Then
            SetCookies(userName)
        End If
        LoginCounter(userName)
     Else
        e.Authenticated = False
     End If        

SetCookies()

    Dim tkt As FormsAuthenticationTicket
    Dim cookiestr As String
    Dim ck As HttpCookie

    tkt = New FormsAuthenticationTicket(1, userName, DateTime.Now(), DateTime.Now.AddDays(7), False, "")
    cookiestr = FormsAuthentication.Encrypt(tkt)
    ck = New HttpCookie(FormsAuthentication.FormsCookieName(), cookiestr)
    ck.Expires = tkt.Expiration
    ck.Path = FormsAuthentication.FormsCookiePath()
    HttpContext.Current.Request.Cookies.Remove(".ASPXAUTH")
    Response.Cookies.Add(ck)

    End Sub

マスター ページのログイン ステータス コントロール

    LoginStatus1_LoggingOut Handles LoginStatus1.LoggingOut

    FormsAuthentication.SignOut()
    Session.Clear()
    Session.Abandon()
    Dim cookie1 As New HttpCookie(FormsAuthentication.FormsCookieName, "")
    cookie1.Expires = DateTime.Now.AddYears(-1)
    Response.Cookies.Add(cookie1)

    Dim cookie2 As New HttpCookie("ASP.NET_SessionId", "")
    cookie2.Expires = DateTime.Now.AddYears(-1)
    Response.Cookies.Add(cookie2)

Web.config

    <authorization>
    <deny users="?"/>
    </authorization>

    <authentication mode="Forms">
    <forms name=".ASPXAUTH" loginUrl="Login.aspx" defaultUrl="Default.aspx" cookieless="UseCookies"  timeout="1440" path="/" protection="All"/>
    </authentication>

解決策: これをGlobal.asaxに入れてください..

     Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
     Dim fromurl As String = "http://mysite.com"
     Dim tourl As String = "http://www.mysite.com"
     If HttpContext.Current.Request.Url.ToString().ToLower().Contains(fromurl) Then
        HttpContext.Current.Response.Status = "301 Moved Permanently"
        HttpContext.Current.Response.AddHeader("Location", tourl)
     End If
     End Sub
4

1 に答える 1

1

セッション Cookie は (サブ) ドメイン固有のものだと思います。

ブラウザーが 1 つのセッションのみを使用するようにするには、すべての要求を 1 つのドメインから別のドメインにリダイレクトする必要があります。

于 2012-04-25T20:49:23.753 に答える