PDA

View Full Version : سوال: نشان دادن نام کاربر در بالای page



mina_ghorbani
پنج شنبه 17 آذر 1390, 20:29 عصر
سلام
من می خوام وقتی کاربر لاگین می کنه اسمش رو بالای صفحه نشون بده مثل کاربر گرامی .... خوش آمدید
برای این کار اومدم کل پروفایل رو در سشن گذاشتم الان یک دفعه به ذهنم رسید که اشتباهه همه اطلاعات کاربر در دسترسه
می شه بهم بگید برای این کار چه می کنند نمی خوام فقط نام کاربری رو بزنه می خوام نام و نام خانوادگی رو بالای
صفحه نشون بده به ذهنم رسید هر کدوم رو تو یه سشن جداگونه بریزم اما گفتم شاید راه دیگه ای داره
یا اینکه فقط نام کاربری رو تو سشن بذارم و بگم هر بار صفحه لود می شه بره از دیتا بیس نام و نام خانوادگی رو بیاره؟
ممنون می شم راهنماییم کنید
 
 

behzad_rainy
پنج شنبه 17 آذر 1390, 20:36 عصر
من همین مشکل رو داشتم
از روش دوم که گفتید استفاده کردم خوبم کار میکنه
از جدول نام و نام خانوادگی رو بر اساس user.identify.name جستجو میکردم

mina_ghorbani
پنج شنبه 17 آذر 1390, 20:45 عصر
این ایراد نیست که هر بار صفحه لود می شه بره از دیتا بیس بخونه

aminghaderi
پنج شنبه 17 آذر 1390, 20:57 عصر
بله راه دیگری داره.
اول این که شما دارید از session استفاده غیر مجاز می کنید؟! کجا گفته شده باید اصلاعات کاربر در آن ذخیره شود؟؟
از session ها برای نگه داری مقادیر در فاصله زمانی کوتاه استفاده می شود.
برای سوال شما به نظر من بسته به کاری که می خواهید انجام بدید دارد ، اگر می خواهید یه صفحه خوش آمد گویی داشته باشید خوب از دیتابیس بخوانید .
اگر قراره نام کاربر در تمام صفحات تکرار بشه ، خوب از کوکی استفاده کنید.
اما از سشن نمی تونید برای این معقوله استفاده کنید ، چون سشن بر اساس تدابیر امنیتی و افزایش کارایی سرور ها بعد از چند دقیق منقضی می شود و کار آیی برنامه شما زیر سوال می رود ؟!
نکته : هر هاستینگ بنا به سیاست های سازمانی خودش سرور های خودش را کانفیگ می کند ، از این رو زمان انقضای سشن ها در هر هاستینگ متفاوت است.

امیدوارم مثمر ثمر واقع شود.

fakhravari
پنج شنبه 17 آذر 1390, 21:07 عصر
اگر از ممبرشیپ استفاده می کنید .
از امکانات خودش استفاده کن مثل user.identify.name
ispostbac دقت داشته باشید.
از پروفایل استفاده کنید.

<asp:Panel ID="Panel1" runat="server" visible='<%# HttpContext.Current.User.Identity.IsAuthenticated %>'>

</asp:Panel>

mina_ghorbani
پنج شنبه 17 آذر 1390, 21:08 عصر
یعنی برای هر بار لاگین یه کوکی بسازم وقتی session تموم می شه از بین بره درسته؟

از member ship استفاده نمی کنم

behzad_rainy
پنج شنبه 17 آذر 1390, 21:09 عصر
نه چه ایرادی؟
من خیلی دنبالش گشتم اکثرا خوندن اطلاعات از پایگاه داده رو پیشنهاد دادن،روی سرعت لود صفحه هم تاثیر آنچنانی نداره
فقط از پایگاه داده نام و نام خانوادگی رکوردی که usernameش برابر user.identify.name هست رو جستجو کن

aminghaderi
پنج شنبه 17 آذر 1390, 21:18 عصر
یعنی برای هر بار لاگین یه کوکی بسازم وقتی session تموم می شه از بین بره درسته؟
درسته.
کاری سختی هم نیست ؟! کار 2 خط کد هست.


نه چه ایرادی؟
اگر منظورتون صحبت من درباره سشن و دیتابیس بود کمی واضح تر منظور رو بگید تا متوجه شوم.

Mohamad1362
جمعه 18 آذر 1390, 09:40 صبح
روش استاندارد استفاده از Session هست ، بدون نگرانی از Session استفاده کن.
لازمه که بدونید اطلاعات Session در سرور نگهداری میشه و کاملا امن هستن، این اطلاعات به کاربر ارسال نمیشن ، تنها چیزی که بین کاربر و سرور مبادله میشه یک شناسه 120 بیتیه که اونم به این سادگیها قابل تشخیص نیست

jaykob
جمعه 18 آذر 1390, 10:39 صبح
سلام دوست عزیز

برای این کار لازمه که شما زمان login سشن رو بدین صورت اضافه کنید :


Session.Add("UserId", quary.id.ToString());
Response.Redirect("/profile/");


البته اون quary که داریم id رو ازش می گیریم همون پرس و جویی است که چک می کنیم ببینیم یوزر نیم و پسورد صحیح است یا نه .

و برای نمایش نام کاربر هم بدین شکل عمل کنید که یک objuser می سازی از کوئری که کاربری رو بر می گردوه که userid اون برابر با اون چیزی هست که از session پاس دادیم :


DataClassesDataContext ctx = new DataClassesDataContext();
tbl_user objUser = (from u in ctx.tbl_users
where u.id == Int32.Parse(Session["UserID"].ToString())
select u).First<tbl_user>();
lblName.Text = objUser.name;
lblFamily.Text = objUser.family;


موفق باشید

aminghaderi
جمعه 18 آذر 1390, 14:14 عصر
پاسخی که من می دهم پشتش 4 سال تجربه کار مفید هست و تجربه شکست سیستم هایی که بر مبنای سشن طراحی شده بود و.... حالا شاید دوستان تجربه بیشتری دارند .
به هر حال راهنمایی دوستان و در اختیار قرار دادن تجربه های کاری بدون هیچ چشم داشتی و نقض شدن آنها بدون هیچ دلیل و مدرکی خوب لذت خواست خودش رو دارد.

fakhravari
جمعه 18 آذر 1390, 14:45 عصر
با سلام
بحث سشن یا بحث نشان دادن نام
اگر شما از ممبرشیپ استفاده میکنید چرا دیگه نام میبرین توی سشن و بعد میبرین یه جای دیگه بعد نمایش میدین.
user.name استفاده کنید.
و اگر از امکانات ممبرشیپ استفاده نمیکنید . خوب از سشن و کوکی استفاده کنید . که کوکی رو زیاد جالب نمیبینم.
چون خود ماکروسوفت از سشن داره استفاده میکنه در سمپل net

jaykob
جمعه 18 آذر 1390, 15:29 عصر
پاسخی که من می دهم پشتش 4 سال تجربه کار مفید هست و تجربه شکست سیستم هایی که بر مبنای سشن طراحی شده بود و.... حالا شاید دوستان تجربه بیشتری دارند .
به هر حال راهنمایی دوستان و در اختیار قرار دادن تجربه های کاری بدون هیچ چشم داشتی و نقض شدن آنها بدون هیچ دلیل و مدرکی خوب لذت خواست خودش رو دارد.


سلام دوست عزیز

با توجه به تجربتون سوال می کنم که آیا داخل کدی که من گذاشتم فقط id پاس داده می شه داخل سشن و بقیه موارد رو از دیتابیس می خونیم مشکل امنیتی وجود داره ؟ در این صورت ممنون می شم بیشتر توضیح بدید .

با تشکر

aminghaderi
جمعه 18 آذر 1390, 16:06 عصر
آیا داخل کدی که من گذاشتم فقط id پاس داده می شه داخل سشن و بقیه موارد رو از دیتابیس می خونیم مشکل امنیتی وجود داره ؟
ببینید من نمی گم مشکل امنیتی دارد ، من می گم کار بهنیه ای نیست.
ببینید من یه پرتالی طراحی کردم با لوگین کاملا شخصی (حدود 2 سال پیش) بعد مدیران که وارد سیستم می شدن و مطلب می گذاشتند به مشکل برخورده بودند ، ولی مدیران که بحث مجوز دهی و ....رو کنترل می کردند راضی بودند.
خوب طبق بررسی هایی که ما کردیم متوجه شدیم که مدیرانی که مطلب روی پرتال قرار می دهند به واسطه فرمت دادن به مطلب ، خوب زمانی رو از دست می دادند و در این میان سشن اونها منقضی می شد.
برای این مورد کلی راه رو امتحان کردیم و حتی با پشتیبان هاست هم صحبت کردیم که حد اقل زمان از بین رفتن سشن رو بروی سرور ما افزایش بدهد که با توضیحات امنیتی ایشون روبرو شدیم و نهایتا بی خیال شدیم.
برای حل مشکل مجبور شدیم لایه امنتی سیستم رو تغییر بدیم.


خود ماکروسوفت از سشن داره استفاده میکنه
بله ، ولی وقتی سرور ها به دلایل امنیتی و بهانه های استفاده زیاد از منابع سیستم و بهینه سازی سشن شما رو منقضی می کنند؟!
شاید مبر شیپ دات نت از application هم استفاده می کنه ؟!

mina_ghorbani
جمعه 18 آذر 1390, 18:47 عصر
ممنون از راهنمایی هاتون با اول با session درست کرده بودم اما به نظرم منطقی نبود و نمی دونستم با چه روشی درست کنم
با cookie درستش کردم این بهتره به نظرم فقط نام و نام کاربری رو در Cookie نگه می دارم که بالای صفحه نشون بده و جاهای دیگه که لازم دارم Query بر اساس نام کاربری می زنم

fakhravari
جمعه 18 آذر 1390, 18:53 عصر
با سلام
اخر معلوم نشد ممبرشیپ استفاده میشود یا نمیشود.
در پست اخر 15 انگار که از این امکانات استفاده نمیشود

jaykob
جمعه 18 آذر 1390, 20:51 عصر
ببینید من نمی گم مشکل امنیتی دارد ، من می گم کار بهنیه ای نیست.
ببینید من یه پرتالی طراحی کردم با لوگین کاملا شخصی (حدود 2 سال پیش) بعد مدیران که وارد سیستم می شدن و مطلب می گذاشتند به مشکل برخورده بودند ، ولی مدیران که بحث مجوز دهی و ....رو کنترل می کردند راضی بودند.
خوب طبق بررسی هایی که ما کردیم متوجه شدیم که مدیرانی که مطلب روی پرتال قرار می دهند به واسطه فرمت دادن به مطلب ، خوب زمانی رو از دست می دادند و در این میان سشن اونها منقضی می شد.
برای این مورد کلی راه رو امتحان کردیم و حتی با پشتیبان هاست هم صحبت کردیم که حد اقل زمان از بین رفتن سشن رو بروی سرور ما افزایش بدهد که با توضیحات امنیتی ایشون روبرو شدیم و نهایتا بی خیال شدیم.
برای حل مشکل مجبور شدیم لایه امنتی سیستم رو تغییر بدیم.



ممنون از پاسختون . اما امکان داره بیشتر توضیح بدید که ما به چه شکل می تونیم این قضیه رو حل کنیم و چه راه حل هایی و تکنیک هایی مد نظر شما است .

شما هیچ نظری در رابطه با تغییر در sessionState و یا session end در Global.asax یا حتی گذاشتن تایمر برای یاد آوری زمان انقضای نشست برای مدیر ندارید ؟

زمانی که من داخل MSDN دیدم 20 دقیقه بود برای خیلی از کارها مناسب است اما برای مواردی که شما می گید صحیح است . به همین منظور ممنون می شم بیشتر موضوع رو توضیح بدید تا بتوان قضیه رو حل کرد .

با تشکر

mina_ghorbani
جمعه 18 آذر 1390, 21:11 عصر
با سلام
اخر معلوم نشد ممبرشیپ استفاده میشود یا نمیشود.
در پست اخر 15 انگار که از این امکانات استفاده نمیشود

در پست 6 گفتم از ممبر شیپ استفاده نمی کنم

fa_karoon
جمعه 18 آذر 1390, 21:41 عصر
سلام
همه پست ها رو خوندم حالا یه سوال دارم
من هنگام لاگین از FormsAuthentication استفاده می کنم به این صورت که یه ticket می سازم و اطلاعات کاربر رو در اون نگه می دارم من نیاز دارم که UserID کاربر رو داشته باشم حالا به نظر شما اشکال امنیتی ای وجود نداره اگه من این ID رو تو این ticket نگه دارم؟
بعد یه سوال دیگه وقتی از روش FormsAuthentication استفاده می کنیم می تونیم از طریق RoleProvider و تابع GetRolesForUser نام کاربری را بدهیم و نقش فرد را دریافت کنیم، برایم جای سوال است چرا همه جستجوها در جدول کاربر براساس نام کاربری انجام می شود؟ بهتر نیست براساس ID باشد؟

fakhravari
جمعه 18 آذر 1390, 23:16 عصر
سلام
همه پست ها رو خوندم حالا یه سوال دارم
من هنگام لاگین از FormsAuthentication استفاده می کنم به این صورت که یه ticket می سازم و اطلاعات کاربر رو در اون نگه می دارم من نیاز دارم که UserID کاربر رو داشته باشم حالا به نظر شما اشکال امنیتی ای وجود نداره اگه من این ID رو تو این ticket نگه دارم؟
بعد یه سوال دیگه وقتی از روش FormsAuthentication استفاده می کنیم می تونیم از طریق RoleProvider و تابع GetRolesForUser نام کاربری را بدهیم و نقش فرد را دریافت کنیم، برایم جای سوال است چرا همه جستجوها در جدول کاربر براساس نام کاربری انجام می شود؟ بهتر نیست براساس ID باشد؟

نام کاربر یکتاست.
چرا باید id کاربر را داشته باشیم :متفکر:
این ticket چیه:لبخندساده:

fa_karoon
جمعه 18 آذر 1390, 23:44 عصر
نام کاربر یکتاست.
چرا باید id کاربر را داشته باشیم :متفکر:
این ticket چیه:لبخندساده:
FormsAuthenticationTicket کلاسی ست که به طور خودکار یک کوکی برای نگهداری یک سری اطلاعات می سازد. معمولا در احراز
هویت پیشرفته استفاده می شود.
نمی دانم احساس می کنم id کاربر خیلی مطئمن تر است(احتمالا تصورم اشتباه است)

aminghaderi
شنبه 19 آذر 1390, 00:15 صبح
شما هیچ نظری در رابطه با تغییر در sessionState و یا session end در Global.asax یا حتی گذاشتن تایمر برای یاد آوری زمان انقضای نشست برای مدیر ندارید ؟
والا اون موقع ما از این موارد هم استفاده کردیم ولی خوب گفتم فایده ای نداشت و سرور جوری تنظیم می شد که هر کار می کردیم سشن ها بیشتر از 20 دقیقه دوام نمی آورد؟!
گذاشتن تایمر وجهه خوبی که ندارد و طراحی مهندسی سیستم رو زیر سئوال می برد .
دیدم میل سرور هایی که از این روش استفاده می کنند ، ولی به نظر من زیاد مناسب کنترل پنل سایت نیست ، حوصله کاربران یا مدیران سر می رود و شاکی می شوند.
برای حل این مورد راه زیاده :
1- تلفیق سشن با کوکی.
2- تلفیق سشن با url .
3- تلفیق سشن با ویو استیت.
4- ...

موفق باشید.

jaykob
شنبه 19 آذر 1390, 17:39 عصر
والا اون موقع ما از این موارد هم استفاده کردیم ولی خوب گفتم فایده ای نداشت و سرور جوری تنظیم می شد که هر کار می کردیم سشن ها بیشتر از 20 دقیقه دوام نمی آورد؟!
گذاشتن تایمر وجهه خوبی که ندارد و طراحی مهندسی سیستم رو زیر سئوال می برد .
دیدم میل سرور هایی که از این روش استفاده می کنند ، ولی به نظر من زیاد مناسب کنترل پنل سایت نیست ، حوصله کاربران یا مدیران سر می رود و شاکی می شوند.
برای حل این مورد راه زیاده :
1- تلفیق سشن با کوکی.
2- تلفیق سشن با url .
3- تلفیق سشن با ویو استیت.
4- ...

موفق باشید.

ممنون از راهنمایی خوبتون . اگر وقت دارید و امکان داره از این مواری که گفتید مثل تلفیق سشن با url رو یک مثال بگید .

با تشکر

Mohamad1362
یک شنبه 20 آذر 1390, 17:14 عصر
سلام
همه پست ها رو خوندم حالا یه سوال دارم
من هنگام لاگین از FormsAuthentication استفاده می کنم به این صورت که یه ticket می سازم و اطلاعات کاربر رو در اون نگه می دارم من نیاز دارم که UserID کاربر رو داشته باشم حالا به نظر شما اشکال امنیتی ای وجود نداره اگه من این ID رو تو این ticket نگه دارم؟
بعد یه سوال دیگه وقتی از روش FormsAuthentication استفاده می کنیم می تونیم از طریق RoleProvider و تابع GetRolesForUser نام کاربری را بدهیم و نقش فرد را دریافت کنیم، برایم جای سوال است چرا همه جستجوها در جدول کاربر براساس نام کاربری انجام می شود؟ بهتر نیست براساس ID باشد؟
FormsAuthentication چیزی نیست که بخواهید توش اطلاعاتی رو ذخیره کنید یا برای انتقال اطلاعات بین صفحات ازش استفاده کنید . این کلاس در زمان ورود کاربر به سایت (Login) یک کوکی رو ایجاد میکنه که نشون میده کاربر به سایت Login کرده . وقتی کاربر برای یه مدت تعیین شده درخواستی رو برای سرور نفرسته این کوکی از بین میره و کاربر دوباره باید Login کنه. اون مقداری رو که برای این کلاس در نظر میگیرید در واقع اسم این کوکی هست نه مقدار داخلش.
شما برای نگهداری اطلاعات بهتره از Sessionها استفاده کنید ، البته از Coocki و QueryString هم میتونید استفاده کنید که اصلا توصیه نمیشه ، هم از لحاظ امنیتی و هم از لحاظ دردسرهای بعدش.
در مورد Roleها هم اگر از MemberShip استفاده نمیکنید غیر قابل دسترس هستند ، البته با چند خط کد اضافه و طراحی یه جدول به راحتی میشه MemberShip رو پیاده سازی کرد ، دردسرش هم کمتره