ユーザーの行動に応じて、特定のページでより多くのデータが必要です。現在、セッションを使用していますが、すべてをCookieに移動したいと思います。それは多くのデータではないので、私はすべてを認証チケット/クッキーに便乗させることができると思いました
@Portmanへの称賛に基づく@jorsh1、Ticket.UserDataは、変化するデータを保存する場所ではありません。あるページから別のページに移動するときに、認証チケットを常に再作成する必要はありません。
セッションサービスまたはSQLServerでセッションデータを使用します。セッション中のデータが不要で、データが小さく機密性が低い場合は、Cookieを使用してください。(*)
UserDataを使用したMSの標準的な例は、ロールのリストなどを保存して、「このユーザーは管理者だと思いますか」などと言うことができるようにすることですが、管理者ロールのようなものであれば、データベースにアクセスして確認することになるでしょう。 Cookieの内容を暗黙的に信頼する前に。
文字列plainTextUserData=fid.Ticket.UserData;
これは、Asp.Netが既にチケットを復号化しているため、アプリ内でのみ機能します。ただし、データIIRCを設定する場合は、フォーム認証Cookieを再作成して再添付する必要があります。
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
currentTicket.Version + 1,
currentUser.UserName,
now,
now.Add(formsAuthentication.Timeout),
false,
"new user data string",
FormsAuthentication.FormsCookiePath);
string hash = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(
FormsAuthentication.FormsCookieName,
hash);
Response.Cookies.Add(cookie);
別のアプリは、復号化キーを認識していないか、ブルートフォース攻撃を受けていない限り、このチケットをデコードできません。アプリの負荷分散を行ったり、Webガーデンを使用したりする場合は、キーの同期を維持する必要もあります。
*私はセッションで物事を保存することを支持していません。通常、そのデータを永続化する別の方法があります。
[編集]私がセッションを使用する目的:
私がよく行う唯一のことは、セッションサーバーベースのセッションにユーザーの重要なデータのライトバージョンを保存することです。ただし、透過的に読み込まれるようにし、チケットの内容を複製しないように注意してください。
そうすれば、Cookieに機密性の高いものを公開したり、セッションに依存したりすることはありません。また、積極的なセッション再生を設定しました。セッションに保存されている少量のデータと組み合わせると、セッションで問題が発生することはありません。また、セッションの内容を認識しているコードは1つだけなので、簡単にリファクタリングできます。
それ以外の場合、セッションは悪です。ビューステートを必要とするページ内に維持するか、データベースに一時的な状態を保持することを好みます。