PDA

View Full Version : گفتگو: مدیریت لاگین در یک وبسایت بزرگ



Ali_M.Eghbaldar
سه شنبه 29 مرداد 1392, 16:10 عصر
سلام دوستان :قلب:
همیشه نوشتن وبسایت های کوچیک کار ساده ای بنظر میاد
چون که بازدید زیادی نداره و مسلما پردازش زیادی روش صورت نمیگیره
اما وقتی کار بزرگ باشه و به التبع بازدیدکنندگانش زیاد باشن ، اون وقت مشکللاتی پدید می آید که کمی مدیریت سخت میشه
یکی از اون موارد لاگین کاربر هاست ...

من برای پروژه ای از روش زیر استفاده کردم که گاهی با خطای خالی بودن Session روبرو میشم ، البته اینو هم بگم که local درست کار میکنه
ولی در کل میخوام نظر دوستان در مورد این روش جویا شم که اگه مشکلی داره رفع بشه و یا اگر بهتر میشه نوشت اصلاحش کنم ... ممنون میشم که مشارکت کنید ... :چشمک:

1) اول اینکه جدولی دارم که user/pass داخلش و موقع لاگین چک می کنم و اگه همخوانی داشت میره مرحله بعد
2) اگر تیک remember داشت


If chkRemember.Checked Then
Dim c As New HttpCookie("DotCom", txtEmail.Text)
c.Expires = DateTime.Now.AddYears(1)
Context.Response.Cookies.Add(c)
End If

که این کوکی فقط هنگام ورود وجود استفاده می شود ونه صفخات بعدی
3) سپس session اصلی سایت ، که تقریبا تمام اقدامات بانکی و غیر بانکی با اون انجام میشه ، اینطوری پر میشه

Session("MY") = txtEmail.Text
4) بعد میام برای اینکه در هر لحظه صلاحیت کاربر بررسی کنم از دستور زیر استفاده میکنم

FormsAuthentication.SetAuthCookie(txtEmail.Text, True)
5) و در انتها ورود می کنم به صفحه کاربری

چنتا نکته :
1* سیشن MY در تمام صفحاتی که به بانک متصل است داره use میشه
2* در directory ها از web.config زیر استفاده میکنم که بوسیله FormsAuthentication (شماره 4 فوق) صلاحیت کاربر بررسی میکنه

<?xml version="1.0"?>

<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
</system.web>

<location path="Default.aspx">
<system.web>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
</system.web>
</location>


</configuration>
3* در فایل web.config مادر با کد زیر صلاحیت فوق بررسی شده و در صورت خالی بودن و یا عدم صلاحیت سیشن به صفحه اول منتقل میشه

<authentication mode="Forms">
<forms loginUrl="~/default.aspx" name=".ASPXFORMSAUTH"/>
</authentication>

سوالات :
1) اشکالات روش بالا چیست؟
2) روش جایگزینی وجود دارد؟
3) نظر شما در مورد استفاده کوکی بجای روش بالا چیست؟
4) سایت هایی با بازدید بالا همچون google و یا facebook از چه روش هایی استفاده می کنند؟

tree1371
سه شنبه 29 مرداد 1392, 16:58 عصر
معمولا این خطا در زمانی رخ می دهد که شما در رویداد page load از سشن استفاده می کنید . شاید همگی سشن رو به عنوان یک عنصر عالی و امن بدونیم که همینطور هم هست اما واقعیت اینه سشن برای حمل و نقل اطلاعات مهم هست نه نگه داشتن اطلاعات بهترین راه برای این کار استفاده از روش شخصی سازی می باشد که هم امن هست هم اینکه دیگه نیازی به سشن نیست و عالی تر اینکه به راحتی می توانید هر اطلاعاتی از کاربر رو می خواید ذخیره کنید و از اون استفاده نمایید. در باره Personalization جست و جو نمایید.

ahmad156
سه شنبه 29 مرداد 1392, 17:50 عصر
دوست عزیز استفاده از Session توصیه نمیشه.من با همون کوکی کارای لوگین و تشخیص هویت رو انجام میدم
اتفاقا مدتی هست دارم یه مقاله کامل در موردش تهیه میکنم به زودی همراه با مثال توی همین سایت ارائه میدم

Ali_M.Eghbaldar
سه شنبه 29 مرداد 1392, 17:55 عصر
من هم امروز به همین موضوع فکر کردم ولی اگه کاربر قسمت کوکی browser غیر فعال کنه چی؟
من قسمت کوکی فایرفاکس بر اساس عکس زیر غیر فعال کردم و کد کار نکرد خوب طبیعی اون موقع چی؟109396

ahmad156
سه شنبه 29 مرداد 1392, 18:49 عصر
دوست عزیز اول درصد کاربرایی که این کار رو میکنن قابل چشم پوشی هست که میتونین در این صورت یا پیغام مناسب به کاربر بدین یا اینکه از URL استفاده کنین.توی مقاله همین مورد رو هم قید کردم

Ali_M.Eghbaldar
سه شنبه 29 مرداد 1392, 18:52 عصر
بله !
ولی سایت نباید ضعیفی داشته باشد اونم در حجم بالا !!
ولی منظنورتون از URL چیه؟

ahmad156
سه شنبه 29 مرداد 1392, 19:05 عصر
دوست عزیز این ضعف از طرف کاربر هست
http://msdn.microsoft.com/en-us/library/aa479315.aspx

Ali_M.Eghbaldar
سه شنبه 29 مرداد 1392, 20:56 عصر
بله تقریبا حق با شماست
وقتی کوکی بسته میشه تا اینجا که امتحان کردم google ، cloob ، blogfa اجازه ورود نمده
فقط یک سوال
چطوری آمار کاربران آنلاین و آفلاین حساب کنیم؟
وقتی با سیشن کار میکنیم میتونیم از Session_end استفاده کنیم اینجا چیکار میتونیم کنیم؟

tree1371
سه شنبه 29 مرداد 1392, 23:08 عصر
دقیقا آقای احمد هم درست می گن یکی از متداولترین و بهترین راه ها کوکی هست که خیلیا فقط از نظر امنیتی گیر میدن که اونم اگر اطلاعات مهمی رو ذخیره نکنی درونش اصلا مهم نیست دقیقا گوگل و فیس بوک هم از همین طریق استفاده می کنند واسه امتحان لاگین کنید بعد کل کوکی هاتون پاک کنید بعد می بینید دوباره می گه لاگین کنید و طبق بررسی که کردم فقط UserName رو نگه میدارن . سشن رو بهتره در بخش ادمین استفاده کنید که بخش مهمی هست .

ahmad156 منتظر مقالتون هستیم امیدوارم زودتر بیاد من یکی مشتری اولشم

Ali_M.Eghbaldar
سه شنبه 29 مرداد 1392, 23:10 عصر
بله
ولی باید چطوری آمار لاگین شده ها و آفلاین ها بدست بیاد ، وقتی روال SESSION_END از دست دادیم ؟

tree1371
سه شنبه 29 مرداد 1392, 23:10 عصر
رویداد سشن چی هست ؟! رویداد سشن یعنی جلسه !! یعنی اینکگه هر کاربر که وارد میشه این رویداد البته start شروع میشه و هر کابر خارج میشه بعد از 20 سشنش end میشه شما متغییری تعریف کنید به وسیله application بعد بهش بگید در هر سشن start یکی اضافه کن و در هر سشن End یکی کم کن . در واقع این یک رویداد هست که حتما استفاق میفته و اصلا نیازی به سشن نیست

Ali_M.Eghbaldar
سه شنبه 29 مرداد 1392, 23:14 عصر
بله
حرف شما درسته
ولی اگر قرار باشه اطلاعات کاربر مثل نام کاربری داخل کوکی قرار بیگیره ، پس باید در یکی از روال های SESSION_END یا APPLICATAION_END مقدار کوکی خوانده بشه و بر اساس اون مقدار (نام کاربری) جدول کاربر آپدیت بشه
ولی ما در فایل global نمیتونیم به کوکی دسترسی داشته باشیم
راه حل ؟؟؟؟؟

tree1371
سه شنبه 29 مرداد 1392, 23:20 عصر
از کد زیر استفاده کنید در گلوبال

با این کد بگیرید
HttpCookie myCookie = Request.Cookies["UserSettings"];

با این کدم مقدار می تونید هم اینجا بدید ولی خوب مطمئنا بهترین جا همون لاگینتون هست

public void Application_BeginRequest()
{
myCookie = new HttpCookie("UserSettings");
myCookie.Value = "nl";
myCookie.Expires = DateTime.Now.AddDays(1d);
Response.Cookies.Add(myCookie);
}



بهترین جا از نظر من beginRequest هست چون ممکنه کاربر خارج بشه و بهتره واسه هر درخواست که کابر میده کوکی چک شه

mohammad kafiyan
چهارشنبه 30 مرداد 1392, 02:30 صبح
اتفاقا مدتی هست دارم یه مقاله کامل در موردش تهیه میکنم به زودی همراه با مثال توی همین سایت ارائه میدم

برادر گل منتظر این مقاله هستیم
در زمینه استفاده از کوکی ها در login و مبحث مربوز به rolesهستش
اگر باشه خیلی خوبه ؟؟؟؟؟؟؟؟؟

ahmad156
چهارشنبه 30 مرداد 1392, 16:59 عصر
برادر گل منتظر این مقاله هستیم
در زمینه استفاده از کوکی ها در login و مبحث مربوز به rolesهستش
اگر باشه خیلی خوبه ؟؟؟؟؟؟؟؟؟
آره دوست عزیز .تا اوایل هفته آینده کامل میشه

asn2010
پنج شنبه 31 مرداد 1392, 01:08 صبح
از کد زیر استفاده کنید در گلوبال

با این کد بگیرید
HttpCookie myCookie = Request.Cookies["UserSettings"];

با این کدم مقدار می تونید هم اینجا بدید ولی خوب مطمئنا بهترین جا همون لاگینتون هست

public void Application_BeginRequest()
{
myCookie = new HttpCookie("UserSettings");
myCookie.Value = "nl";
myCookie.Expires = DateTime.Now.AddDays(1d);
Response.Cookies.Add(myCookie);
}



بهترین جا از نظر من beginRequest هست چون ممکنه کاربر خارج بشه و بهتره واسه هر درخواست که کابر میده کوکی چک شه

دوست عزیز
دستور شما در app_end کار نکرد :

Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
Dim c As New Class1
Dim M As HttpCookie = Request.Cookies("TestC")
c.insert(M.Value.ToString)
End Sub

asn2010
شنبه 02 شهریور 1392, 00:10 صبح
دوستان لطفا راهنمایی کنند ، ممنون میشم

asn2010
شنبه 02 شهریور 1392, 02:19 صبح
Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs)

Try
If Request.Cookies("CookieLogin").Value.ToString() <> "" Then
Dim Con As HttpContext = HttpContext.Current
Con.Session("Login") = Response.Cookies("CookieLogin").Value.ToString()
End If
Catch ex As Exception
End Try

End Sub
کار نمی کنه!!!