4

アプリケーションセクションへの認証とユーザー/ロールアクセスを実装するために、メンバーシッププロバイダーを使用してWebアプリに取り組んでいます。

マスター ページでコントロールをログアウト リンクとして使用LoginStatusしていますが、テストしたところ、ログアウトが機能しないことがわかりました。アプリケーションの任意のページに (ログイン後に) 再度アクセスしようとすると、そのページが表示されます...

この問題は、自動的にクリアされないユーザー セッションに保存されたデータに依存していると思います。それは正しい?

では、ログアウトとクリアセッションを実装する正しい方法はどれですか?

LoginStatusコントロール のイベントは実装していません。フォーム認証を使用しています。私のログインページでは、次のコードを使用しています:

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
   1, // Ticket version
   this.txtUser.Text, // Username associated with ticket
   DateTime.Now, // Date/time issued
   DateTime.Now.AddMinutes(30), // Date/time to expire
   true, // "true" for a persistent user cookie
   ruolo, // User-data, in this case the roles
   FormsAuthentication.FormsCookiePath);

string hash = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(
   FormsAuthentication.FormsCookieName,
   hash);

if (ticket.IsPersistent) { cookie.Expires = ticket.Expiration; }

Response.Cookies.Add(cookie);

私のweb.config system.webセクションでは:

<authentication mode="Forms">
  <forms name=".ASPXAUTH" loginUrl="login.aspx" protection="All" path="/" domain="keyforup.it"/>
</authentication>
<authorization>
  <deny users="?"/>
</authorization>
4

2 に答える 2

2

この問題の解決策を見つけようとして、私はほとんど頭がおかしくなりました。他のブラウザではすべて正常に動作しますが、firefox と chrome では、ログイン後に最初のページでユーザーがログアウトされません。

site.master ファイルのフォームのアクション プロパティを action="default.aspx" として設定すると、機能し始めました。

エクスプローラーデバッガーを見ると、フォームアクションにはデフォルト値がありましたが、クロムとFirefoxのアクションにはプロパティが設定されていませんでした。これは、.net ログイン ステータス コントロール スクリプトに問題があるのではないかと考えています。

私のシステムは機能するようになったので、これ以上検索することはありませんが、これが同様の問題を抱えている人に役立つことを願っています.

于 2013-05-23T13:39:48.970 に答える
1

コントロールのイベントで呼び出すことSession.Abandon()で問題は解決しますが、これがこれを達成するための最良の方法かどうか疑問に思っています。LoggedOutLoginStatus

于 2013-02-27T10:14:51.633 に答える