9

URLからテナント名を取得しています。一度だけ実行してCookieに保存し、新しいページのリクエストで必要になったときにそこから取得したいと思います。

以下のコードを使用してCookieを「作成」しています。インターフェイスで追加情報を保存できるようになることを期待していましたが、そうではありません。これを行う方法はありますか、それとも私は間違った方向に進んでいますか?

    public void SignIn(string userName, bool createPersistentCookie)
    {
        if (String.IsNullOrEmpty(userName))
            throw new ArgumentException("Value cannot be null or empty.", "userName");

        FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
    } 

前もって感謝します。

4

2 に答える 2

13

codeplexおよびNugetのFormsAuthenticationExtensionsプロジェクトは、まさにこれを実行します。 https://archive.codeplex.com/?p=formsauthext

使用法-値の設定

using FormsAuthenticationExtensions;
using System.Collections.Specialized;

var ticketData = new NameValueCollection
{
    { "name", user.FullName },
    { "emailAddress", user.EmailAddress }
};
new FormsAuthentication().SetAuthCookie(user.UserId, true, ticketData);

使用法-値の取得

using FormsAuthenticationExtensions;
using System.Web.Security;

var ticketData = ((FormsIdentity) HttpContext.Current.User.Identity).Ticket.GetStructuredUserData();
var name = ticketData["name"];
var emailAddress = ticketData["emailAddress"];

基本的に、FormsAuthentication Cookie内に名前/値ディクショナリを追加して、頻繁に使用される値を保存できます。このストアを活用して、companyIdなどのユーザー情報の小さなサブセットを保存します。

さらに、ここでは「ブラックマジック」は発生せず、FormsAuthenticationチケット内のUserDataプロパティの設定/取得をカプセル化するだけです。

考慮事項として、プロジェクトページの下部にあるメモを必ずお読みください。これは、少量の長期データにのみ使用する必要がある理由を説明しています。

于 2013-02-07T19:10:26.083 に答える
7

個人的には、AuthCookieを変更しようとはしません。代わりに、新しいCookieを作成します。

var myCookie = new HttpCookie("myCookie");//instantiate an new cookie and give it a name
myCookie.Values.Add("TenantName", "myTenantName");//populate it with key, value pairs
Response.Cookies.Add(myCookie);//add it to the client

次に、このようにCookieに書き込まれた値を読み取ることができます

var cookie = Request.Cookies["myCookie"];
var tenantName = cookie.Values["TenantName"].ToString();
//tenantName = "myTenantName"
于 2013-02-07T18:59:27.147 に答える