تمرير القيم أو البيانات من صفحة إلى أخرى عند استخدام التحكم في تسجيل الدخول في 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.Identity.Name

وكما اقترح أندرو، الدورة هو مكان مشترك لوضع اسم المستخدم، على الرغم من أنني تجنب استخدام جلسة على الإطلاق إذا كان ذلك ممكنا.

هل يمكن تعيين ملف تعريف ارتباط مع اسم المستخدمين.

ويمكنك أيضا تعيين الخاصية DestinationPageUrl للتحكم تسجيل الدخول لتشمل اسم المستخدم في سلسلة الاستعلام. على الرغم من أن يشعر / يبدو عرجاء جدا.

مثل سكوتس قال، إذا كنت تستخدم عناصر تحكم تسجيل الدخول القياسية وموفر العضوية، فهذه المعلومات متاحة لك بالفعل في User.Identity.Name.

السبب الوحيد الذي يجعلني أقوم بنشر إجابة هو ذكر اسم الدخول التحكم، والذي يمكنك إسقاطه على الصفحة/الصفحة الرئيسية وتنفيذ ذلك تلقائيًا نيابةً عنك:

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

سيؤدي هذا إلى ظهور "مرحبًا يا Zhaph" عندما يقوم المستخدم بتسجيل الدخول، أو لا شيء إذا لم يكن قد قام بذلك.

يمكنك أيضًا دمج هذا بشكل جيد مع عرض تسجيل الدخول و حالة تسجيل الدخول ضوابط:

<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. إذا قام المستخدم بتسجيل الدخول، قم بعرض:مرحبًا بك مرة أخرى زاف - تسجيل الخروج

تتم تعبئة روابط تسجيل الدخول بواسطة الإعدادات الموجودة في web.config، ويتم إنشاؤها بواسطة عنصر التحكم LoginStatus.

نعم كما قال أندرو، الجلسة هي المكان الأساسي لتخزين البيانات الحساسة.

ولكن لماذا اسم المستخدم حساس؟يمكنك حفظه في ملف تعريف الارتباط وطباعته في home.aspx الخاص بك عندما يأتي المستخدم.

يحرر : يمكنك استخدام ملفات تعريف الارتباط في ASP.NET مثل هذا:

// 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);
}

ملحوظة : ملفات تعريف الارتباط المخزنة على جهاز العميل.لذلك لا يجب استخدامها لتخزين البيانات الحساسة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top