ASP.NET 2.0でログインコントロールを使用するときに、あるページから別のページに値またはデータを渡す
-
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" />
このコントロールの組み合わせは、次のことを行います。
- ユーザーがログインしていない場合:登録またはログイン
- ユーザーがログインしている場合:ようこそ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。機密データの保存に使用しないでください。