PDA

View Full Version : Login & SignOut



narsis_pro
یک شنبه 12 آذر 1385, 12:31 عصر
چگونه یک برنامه بنویسم در سی شارپ که بشود در آن کاربران با نام کاربری و کلمه عبورشان عملیات Login & SignOut را انجام دهند

shahroozj
یک شنبه 12 آذر 1385, 14:26 عصر
ببخشید سوالتان خیلی کلی است میشه بفرمایید کجاش مشکل دارید ؟
برای تست کاربر و اسم رمز ؟
برای اتصال به دیتا بیس؟
برای استفاده از Session؟
........ ؟؟؟

fg_sahel
یک شنبه 12 آذر 1385, 16:02 عصر
با سلام. من در وب سایتم یک شمارنده میخواهم قرار بدهم که تعداد افراد آنلاین رو نشان بده منتها تعداد افرادی که Log in می کنند جدا و تعداد کاربران مهمان هم جدا نشان داده شود.سوال من این است که از کجا بفهمم کاربری Log in کرده یا مهمان است ؟ در event های Application و Session چکار باید بکنم؟ لطفا راهنماییم کنید.

narsis_pro
دوشنبه 13 آذر 1385, 07:10 صبح
سلام چگونگی صحت نام کاربری و کلمه عبور مد نظر من است با استفاده از سی شارپ و sql server

shahroozj
دوشنبه 13 آذر 1385, 08:26 صبح
از کجا بفهمم کاربری Log in کرده یا مهمان است

روشهای زیادی وجود دارد ولی ساده ترین روش به این شکل است که در session_start یک تابع را صدا بزنید تا یک عدد به شمارنده (میتواند از نوع متغیر Application باشد و یا داخل دیتا بیس قرار گیرد) تعداد کاربران شما اضافه شود ( این برای زمانی است که کاربر login نکرده یا مهمان است)
بعد از اینکه یکی از این کاربران به سایت شما login کرد از شمارنده کاربران مهمان یک عدد کم کنید و به شمارنده (این هم مانند کاربران مهمان می تواند Application باشد یا داخل دیتابیس ذخیره شود) کاربران عضو یکی اضافه کنید .

سلام چگونگی صحت نام کاربری و کلمه عبور مد نظر من است با استفاده از سی شارپ و sql server
باز هم سوال شما خیلی کلی است . اجازه بدید من سوال کنم
آیا شما می توانید با دیتا بیس ارتباط بر قرار کنید ؟
آیا نحوه استفاده از session را میدانید ؟
و کلا با #C چقدر آشنا هستی؟

narsis_pro
سه شنبه 14 آذر 1385, 08:09 صبح
سلام من بانک را فراخوانی کردم و اینجا گیر افتادم که چگونه صحت نام و کلمه عبور را برسی کنم

narsis_pro
سه شنبه 14 آذر 1385, 10:50 صبح
سلام من یک کد دارم به شرح زیر ولی در قسمتی که برجسته است به مشکل بر می خورم
public bool ValidateUser(string uid, string passwd)
{
bool returnValue;
SqlDataReader dr;
bool retVal = false;
string connectionstring = ConfigurationSettings.AppSettings["connectionstring"];
SqlConnection cnn = new SqlConnection(connectionstring);
SqlCommand cmd = new SqlCommand("Select * from rapo where id = \'" + uid + "\'", cnn);
cnn.Open();
dr = cmd.ExecuteReader();

while (dr.Read())
{
if (dr["pas"],passwd=0)
{
retVal = true;

}
}
cnn.Close();
returnValue = retVal;
return returnValue;
}
-------------------------------------

private void Button1_Click(object sender, System.EventArgs e)
{
if (ValidateUser(txtUserName.Text, txtUserPass.Text))
{
FormsAuthentication.RedirectFromLoginPage(txtUserN ame.Text, chkPersistCookie.Checked);
}

else
{
lblMsg.Text = "اطلاعات ورودی شما نا معتبر است";
}

if (ValidateUser(txtUserName.Text, txtUserPass.Text))
{
FormsAuthenticationTicket tkt;
string cookiestr;
HttpCookie ck;

tkt = new FormsAuthenticationTicket(1, txtUserName.Text, DateTime.Now, DateTime.Now.AddMinutes(30F), chkPersistCookie.Checked, "your custom data");
cookiestr = FormsAuthentication.Encrypt(tkt);
ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
if (chkPersistCookie.Checked)
{
ck.Expires = tkt.Expiration;
}
ck.Path = FormsAuthentication.FormsCookiePath;
Response.Cookies.Add(ck);

string strRedirect;
strRedirect = Request["ReturnURL"];
if (strRedirect != "")
{
Response.Redirect(strRedirect, true);
}
else
{
strRedirect = "default.aspx";
Response.Redirect(strRedirect, true);
}
}
else
{
lblMsg.Text = "اطلاعات ورودی شما نا معتبر است";
}

}

shahroozj
سه شنبه 14 آذر 1385, 15:15 عصر
قسمت قرمز رنگ را با این عوض کن


if (dr.item["pas"] == passwd)


در ضمن اگر مشکل حل نشد پیغامش را هم بنویس

narsis_pro
سه شنبه 14 آذر 1385, 22:55 عصر
هنگام اجرای این کد هم با خطای زیر مواجه می شوم if (dr.item["pas"] == passwd)


'System.Data.SqlClient.SqlDataReader' does not contain a definition for 'item'

shahroozj
چهارشنبه 15 آذر 1385, 10:45 صبح
مجدد بدون Item تست کردی ؟
یک بار هم بدون Item تست کن

narsis_pro
چهارشنبه 15 آذر 1385, 11:11 صبح
سلام
اولا مشکل بالا با راهنمایی شما عزیزان درست شد اینگونه if (dr["pas"].ToString()==passwd) و دست دوستانی که من را راهنمایی کردند درد نکنه
ولی حالا که کاربر شناسایی شد و وارد سیستم شد من میخواهم چند کار بکنم
1-جلوی دسترسی کاربرانی که با نام کاربری وارد نشده اند را به پوشه pic بگیرم
2-جلوی دسترسی کاربرانی که فیلد نوع کاربری آنها در بانک اطلاعاتی مساوی با 1 است را به پوشه mehr بگیرم
2-می خواهم کنترل های ورود را مثل textbox و Button هایی که اطلاعات کاربر را دریافت میکردند را Visible=false کنم چون وقتی کاربر وارد سیستم شد دیگر نیاز نیست به آنها و میخواهم به جای آنها یک خوش آمد گویی به کاربر بگویم و دکمه ای را که کاربر را از سیستم خارج میکند را فعال کنم
مثلا من میخواهم این تغییرات را اعمال کنم ولی جواب نمیدهد کد زیر آیا باید آن را در جای خاصی قرار دهم

cmdSignOut.Visible=true;
txtUserName.Visible=false;
lbl1.Text="کاربر گرامی " + Context.User.Identity.Name + "خوش آمدید";
lbl2.Visible=false;
txtUserPass.Visible=false;
Button1.Visible=false;
HyperLink2.Visible=false;

shahroozj
چهارشنبه 15 آذر 1385, 12:49 عصر
پس از اینکه کاربر وارد سایت شد یک متغییر از نوع session ایجاد کن و یک مقدار مشخص که برای خودت مفهوم باشد ( مثلا ID کسی که وارد شده) را در نظر بگیر . از آنجایی که متغییر session در تمام صفحات قابل دسترسی است در صفحات مورد نظر چک کن اگر این متغییر تنظیم شده بود اجازه دسترسی به آن قسمت را بده در غیر این صورت دسترسی را بگیر
امیدوارم خوب توضیح داده باشم

Behrouz_Rad
چهارشنبه 15 آذر 1385, 21:43 عصر
پس از اینکه کاربر وارد سایت شد یک متغییر از نوع session ایجاد کن و یک مقدار مشخص که برای خودت مفهوم باشد ( مثلا ID کسی که وارد شده) را در نظر بگیر . از آنجایی که متغییر session در تمام صفحات قابل دسترسی است در صفحات مورد نظر چک کن اگر این متغییر تنظیم شده بود اجازه دسترسی به آن قسمت را بده در غیر این صورت دسترسی را بگیر
امیدوارم خوب توضیح داده باشم

دوست من!
این روش در ASP کلاسیک استفاده میشد و دیگه منسوخ شده!
شما باید مقدار UserData در کوکی رو چک کنی!

موفق باشید.

shahroozj
یک شنبه 19 آذر 1385, 09:36 صبح
سلام


این روش در ASP کلاسیک استفاده میشد و دیگه منسوخ شده!

دوست عزیز session منسوخ نشده است و نخواهد شد . session منتج از کوکی است و در واقع نوعی کوکی می باشد که به جا اینکه بر روی کلاینت ذخیره شود بر روی سرور ذخیره میشود و فقط آدرس آن بین دو کلایت و سرور رد و بدل میشود .
از کوکی امن تر است و اگر درست استفاده شود performance سرور را هم کاهش نخواهد داد ( اینو گفتم چون خیلی ها به این مورد اشاره می کنند و آن را ضعف میدانند)

اگر شما اطلاعات بهتری داری بفرمایید . خوشحال می شوم

pegasos
یک شنبه 19 آذر 1385, 12:36 عصر
با درود.


این روش در ASP کلاسیک استفاده میشد و دیگه منسوخ شده!



دوست عزیز session منسوخ نشده است و نخواهد شد


بله دوست عزیز ، خیلی وقت است که با Session کار می کنیم و کار داریم و منسوخ نخواهد شد.
ولی اگه خوب توجه کنی منظور آقای راد روش شما بود.

شما که برای Authentication از قوانین ASP.NET پیروی می کنی چرا برای Authorization این کار را نمی کنی.!!! -->> Role-Based Security with Forms-Based Authentication



. session منتج از کوکی است و در واقع نوعی کوکی می باشد که به جا اینکه بر روی کلاینت ذخیره شود بر روی سرور ذخیره میشود و فقط آدرس آن بین دو کلایت و سرور رد و بدل میشود .

خوب شد Session را هم تعریف کردی. :متعجب:


The Session-State HTTP Module
Regardless of the internal implementation, the programmer's API for session-state management is just one—the old acquaintance known as the Session object. It was a COM object in classic ASP that was instantiated in the asp.dll ISAPI extension and injected in the memory space of the ActiveX Scripting engine called to parse and process the .asp script. It is a collection object in ASP.NET, living behind the Session property of the Page class. The exact type is HttpSessionState; it's a class that's not further inheritable and which implements ICollection and IEnumerable. An instance of this class is created during the startup of each request that requires session support. The collection is filled with name/value pairs read from the specified medium and attached to the context of the request—the HttpContext class. The Page's Session property just mirrors the Session property of the HttpContext class.

If developers can simply work with one object—the Session object—regardless of other details, most of the credit goes to an HTTP module that governs the process of retrieving and storing session state with some help from special provider objects. The ASP.NET module in charge of setting up the session state for each user connecting to an application is an HTTP module named SessionStateModule. Structured after the IHttpModule interface, the SessionStateModule object provides session-state services for ASP.NET applications.


منبع :Ms Press Programming Microsoft Asp Net 2.0 Core Reference 2006

اگه یک مقدار از برنامه نویسی کلاینت / سرور اطلاع داشته باشی می بینی که ذهنیتی که از Session داری یک مقدار با واقعیت متفاوته !!!! :متفکر:

دوست عزیز هندل کردن Session برای ASP.NET کار راحتی نیست و اون هم سر بار خاص خودش رو داره...

به امید موفقیت.

shahroozj
یک شنبه 19 آذر 1385, 16:50 عصر
دوست عزیز لطفا به این مورد هم نگاهی بندازید

Sessions are identified by a unique session identifier that can be read using the SessionID property. When session state is enabled for an ASP.NET application, each request for a page in the application is examined for a SessionID value sent from the browser. If no SessionID value is supplied, ASP.NET starts a new session and the SessionID for that session is sent to the browser with the response.

SessionID values are stored in a cookie, by default, but you can also configure your application to store SessionID values in the URL for a "cookieless" session. For more information, see Session Identifiers.

A session is considered active as long as requests continue to be made with the same SessionID value. If the time between requests for a particular session exceeds the specified time-out value in minutes, then the session is considered expired. Requests made with an expired SessionID value result in a new session being started.

منبع : http://msdn2.microsoft.com/en-us/library/ms178581.aspx

shahroozj
یک شنبه 19 آذر 1385, 16:52 عصر
خوب شد Session را هم تعریف کردی.

در ضمن اینجا محلی برای تبادل اطلاعات است اگر قرار است به همین راحتی به کسی توهین شود که دیگه .......

pegasos
دوشنبه 20 آذر 1385, 08:19 صبح
با درود.


در ضمن اینجا محلی برای تبادل اطلاعات است اگر قرار است به همین راحتی به کسی توهین شود که دیگه .......

عبارت من فقط یک اعتراض شدید الحن بود و نه تو هین همانطوری که من کلمه توهین آمیزی در آن نمی بینم.

در کل اگر شما فکر می کنید که توهینی صورت گرفته من همین جا از شما و از تمام کسانی که این مطالب را می خوانند عذر خواهی می کنم.


SessionID values are stored in a cookie, by default, but you can also configure your application to store SessionID values in the URL for a "cookieless" session
.....

تا آنجایی که من توانایی خواندن دارم اینجا نوشته شده :
مقدار شناسه ی Session به صورت پیش فرض در داخل یک کوکی نگهداری می شود(در سمت کلاینت).
و همچنین شما می توانید با تنظیمات از برنامه بخواهید که مقدار شناسه ی Session را در URL ذخیره کند که این حالتcookieless session هم نامیده می شود.

نه به هیچ وجه بحثی روی این نداریم .[این جزو بدیهیات است]
اگه یک مقدار جستجو می کردید می دید که قبلا سر این موضوع بحث شده است.
اشکال هنگام استفاده ازIE7



و در واقع نوعی کوکی می باشد که به جا اینکه بر روی کلاینت ذخیره شود بر روی سرور ذخیره میشود

خوب شما ببینید که مطلبی که خودتان نوشته اید با منبع ی که معرفی می کنید چقدر تفاوت دارد.

شما می گویید که Session نوعی کوکی است که بروی Server ذخیره می شود در صورتی که منبع ی معرفی کرده اید می گوید مقدار شناسه ی Session در یک کوکی نگهداری می شود.


دوست عزیز من به هیچ وجه با نیت جرو بحث به اینجا نیامده ام و دورا دور دست شما را به عنوان یک دوست و همکار می فشارم.

به امید موفقیت.

shahroozj
دوشنبه 20 آذر 1385, 08:40 صبح
I am give up

fg_sahel
پنج شنبه 23 آذر 1385, 15:46 عصر
من متغیر شمارنده را در Application_Start قرار بدم یا درSession_Start ؟
و آیا متغیر شمارنده برای کاربر عضو و کاربر مهمان اینطوری وارد کنیم؟
Application["CounterGuest"]=0
Application["CounterUser"]=0

SabaSabouhi
پنج شنبه 23 آذر 1385, 18:02 عصر
با سلام
براى شمردن از رویداد Session_Start استفاده کن و براى نگهدارى شمارنده از Application Object.

صبا صبوحى

پ.ن: shahroozj و pegasos عزیز، تبادل نظر شما را خواندم. گذشته از سوتفاهم کوچکى که بین شما پیش آمد اطلاعات جالبى را رد و بدل کردید که براى من مفید بود. از هر دوى شما سپاسگزارم.

fg_sahel
شنبه 25 آذر 1385, 10:57 صبح
خیلی ممنونم از راهنماییتون صبا خانوم . مشکلم حل شد.

zolfagharonline
یک شنبه 26 آذر 1385, 11:49 صبح
سلام
من یه سایت دارم که اطلاعات یوزمان روی بانک SQL ذخیره می شن
می خوام لاگین سایت رو از PHP به ASP تغیر بدم
فایل لاگین رو ساختم ولی توی بانک SQL تیبل پسورد شامل چند متغیر دیگه هم می شه
مثل ایمیل . کد . سریال و ...
http://85.185.152.2/Send/Pic/pic/2.jpg

من به وسیله دریم ویور وارم اینو درست می کنم از این کد برای جدا کردن پسورد از سایر قسمتها استفاده کردم :
-----------------------------------------
SELECT TAC_ID, TAC_Val
FROM TacBox.tac_usr
WHERE TAC_Attr='[Global]passwd'
-----------------------------------------
http://85.185.152.2/Send/Pic/pic/1.jpg

ولی این فقط برای جستجو هستش
هنگام لاگین یوزر رو وارد می کنم . ولی توی تیبل پسورد می شه با سریال و یا ایمیل و یا هر کدوم از متغیر هایی که در این تیبل قرار داره لاگین شد .
من می خوام فقط با یوزر و پسور عمل لاگین انجام بگیره ...
====================================
خواهش می کنتم اگه دوستان اطلاعی در این باره دارن بهره دارم به من ایمیل کنن

*********************
zolfagharonline@yahoo.com
*********************