3

dnnログインしたユーザーが別のユーザーとしてログインできるようにするモジュールを構築しています。
しかし、ここでいくつかの有線の問題があります。
これは、現在のユーザーをログアウトし、別のユーザーとしてログインする方法です。

UserInfo userInfo = UserController.GetUserById(portalId, userId);
if (userInfo != null)
{                
    DataCache.ClearUserCache(this.PortalSettings.PortalId, Context.User.Identity.Name);

    if (Session["super_userId"] == null)
    {
        Session["super_userId"] = this.UserId;
        Session["super_username"] = this.UserInfo.Username;
    }

    HttpCookie impersonatorCookie = new HttpCookie("cookieName");
    impersonatorCookie.Expires = DateTime.Now.AddHours(1);
    Response.Cookies.Add(impersonatorCookie);

    Response.Cookies["cookieName"]["super_userId"] = this.UserId.ToString();
    Response.Cookies["cookieName"]["super_username"] = this.UserInfo.Username;

    PortalSecurity objPortalSecurity = new PortalSecurity();
    objPortalSecurity.SignOut();

    UserController.UserLogin(portalId, userInfo, this.PortalSettings.PortalName, Request.UserHostAddress, false);

    Response.Redirect(Request.RawUrl, true);
}

そして、PageLoad()私はこのCookieから値を読み取ろうとしましたが、何も読み取れません。

try
{
    string super_userId = Request.Cookies["cookieName"]["super_userId"];
    string super_username = Request.Cookies["cookieName"]["super_username"];

    if (!String.IsNullOrEmpty(super_userId))
    {
        this.Visible = true;
        this.lblSuperUsername.Text = Session["super_username"].ToString();
        this.txtPassword.Enabled = true;
        this.btnBackToMyAccount.Enabled = true;
    }
...

私もセッションで同じことをしようとしましたが、何も機能しません、そしてなぜ私は理解できませんか?

4

3 に答える 3

5

私がここで見つけたように、リダイレクトされるリクエストで Cookie を設定すると問題が発生する可能性がありドメインが/.

したがって、HTTP ヘッダーを使用してリダイレクトするのではなく、代わりに「ホーム」リンクとメタ リフレッシュまたはJavascript リダイレクトを含む「ログイン」ページを表示することができます。

ところで、Cookie に UserID を設定することは、実際には適切な方法ではありません。その Cookie の値を に変更するとどうなり1ますか?

于 2012-12-20T21:43:17.290 に答える
1

新しい Cookie を設定するときは、常にDomain、およびおそらく とを設定することをお勧めしますExpires

Response.Cookies[cookieName].Domain = RootURL;
Response.Cookies[cookieName].Expires = DateTime.UtcNow.AddDays(cDaysToKeep);

ドメインは、サブドメインを含まない URL にすることが非常に重要です。たとえば、サブドメインを含まない URL にすることは非常に重要mydomain.comですwww.。読み取れず、紛失/上書きする可能性があります。

したがって、Cookie を設定するときに、少なくとも 3 つのパラメーター、 、 、および を設定する関数を作成することをお勧めDomainExpiresますValue

同様の質問と回答:
同じログイン データベースを使用する複数のアプリケーションが互いにログを記録する
asp.net フォーム認証が別のインスタンスにログインしたときにログアウトした

于 2012-12-22T19:18:51.753 に答える
0

これらの2つのステートメントを入れてください

Response.Cookies["cookieName"]["super_userId"] = this.UserId.ToString();
Response.Cookies["cookieName"]["super_username"] = this.UserInfo.Username;

UserController.UserLogin(portalId, userInfo, this.PortalSettings.PortalName, Request.UserHostAddress, false);

UserLoginメソッドがSession変数をリセットしている可能性があります。それが役に立てば幸い :)

于 2012-12-27T11:13:53.923 に答える