ASP.NET 2.0でログインコントロールを使用するときに、あるページから別のページに値またはデータを渡す

StackOverflow https://stackoverflow.com/questions/620134

  •  03-07-2019
  •  | 
  •  

質問

ログインページでASP.NET 2.0で利用可能なログインコントロールを使用しています。ユーザーがデータベースに対して正常に認証されると、ユーザーをhome.aspxにリダイレクトします。ここでは、ユーザーがhome.aspxで自分の名前で迎えられるように、ユーザーの名前もhome.aspxに渡します。例:ウェルカムスミス

ログイン資格情報を確認している間に、データベースのユーザーテーブルからユーザー名を抽出しています。

誰かが安全な方法でこれを行う方法を教えてもらえますか(安全ではないかもしれませんが、少し)。

ありがとう、

役に立ちましたか?

解決

この種のデータに適した場所は、セッション中です。最初のページで次のようなものを試してください:

this.Session["UserName"] = userName;

そしてそのユーザーのそのセッションの後続のページは this.Session [" UserName"] にアクセスできます。

しかし、最善の方法は、静的クラスを作成して Session を管理することです。

using System;
using System.Web;

static class SessionManager
{
    public static String UserName
    {
        get
        {
            return HttpContext.Current.Session["UserName"].ToString();
        }
        set
        {
            HttpContext.Current.Session["UserName"] = value;
        }
    }

        // add other properties as needed
}

その後、アプリケーションは次のようなセッション状態にアクセスできます:

SessionManager.UserName

これにより、最大限の柔軟性とスケーラビリティがもたらされます。

他のヒント

標準のasp.net認証を使用している場合、ページオブジェクトのUserプロパティを介してユーザー名にアクセスできるはずです。

User.Identity.Name

アンドリューが示唆したように、セッションはユーザー名を配置する一般的な場所ですが、可能な限りセッションを使用することは避けます。

ユーザー名でCookieを設定できます。

ログインコントロールのDestinationPageUrlプロパティを設定して、クエリ文字列にユーザー名を含めることもできます。それはかなり不自由な感じ/見えますが。

As ScottS によると、標準のログインコントロールとメンバーシッププロバイダーを使用している場合、この情報はUser.Identity.Nameで既に利用可能です。

回答を投稿する唯一の理由は、 LoginName コントロール。ページ/マスターページにドロップすると、これが自動的に行われます。

<asp:LoginName id="LoginName1" runat="server" FormatString ="Welcome, {0}" />

これにより、「ようこそ、Zhaph」が表示されます。ユーザーがログインしているとき、またはログインしていないときは何もしません。

これを LoginView および LoginStatus コントロール:

<asp:LoginView ID="RegisterLink" runat="server">
  <AnonymousTemplate>
    <div class="titleRegistration">
      <a href="/Users/Register.aspx">Register</a> or 
    </div>
  </AnonymousTemplate>
  <LoggedInTemplate>
    <div class="titleRegistration">
      Welcome back
        <asp:LoginName ID="LoginName1" runat="server" /> -
    </div>
  </LoggedInTemplate>
</asp:LoginView>
<asp:LoginStatus ID="lsGeneral" runat="server"
  LogoutPageUrl="/Users/Logout.aspx" />

このコントロールの組み合わせは、次のことを行います。

  1. ユーザーがログインしていない場合:登録またはログイン
  2. ユーザーがログインしている場合:ようこそZhaph-ログアウト

ログインリンクはweb.configの設定によって生成され、LoginStatusコントロールによって生成されます。

はい、アンドリューが言ったように、セッションは機密データを保存する主要な場所です。

しかし、なぜユーザーの名前が重要なのですか? Cookieに保存して、ユーザーがアクセスするたびにhome.aspxに印刷できます。

編集: ASP.NETでは、次のようにCookieを使用できます:

// Setting cookie : 
Response.Cookies["UserName"].Value = "Erhan";
Response.Cookies["UserName"].Expires = DateTime.Now.AddDays(7); // Persists 1 week

// Getting cookie : 
string username = string.Empty;
if(Request.Cookies["UserName"] != null)
{
    username = Server.HtmlEncode(Request.Cookies["UserName"].Value);
}

注:クライアントのマシンに保存されたCookie。機密データの保存に使用しないでください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top