PDA

View Full Version : باقی ماندن در صفحه login بعد از login



sunn789
چهارشنبه 25 آبان 1390, 00:00 صبح
سلام
بااستفاده از سایت how2LearnAsp.net صفحه لوگین ساختماین صفحه روی هاست کار میکن هاما زمانی که اون رو روی سیستم خودم تست میکنم نام کاربری و کلمه عبور رو میپذیره و خطا نمیده اما توی همون صفحه میمونه
چه باید بکنم

fakhravari
چهارشنبه 25 آبان 1390, 01:08 صبح
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
<providers>
<add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ConnectSring1" applicationName="/"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="true" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"/>
</providers>
</membership>



<roleManager enabled="true">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ConnectSring1" applicationName="/"/>
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider " applicationName="/"/>
</providers>
</roleManager>

<authentication mode="Forms">
<forms loginUrl="LoginToSite.aspx"/>
</authentication>
protected void Login1_LoggedIn(object sender, EventArgs e)
{
if (User.IsInRole("Administrator"))
{
Response.Redirect("Administrator/Default.aspx");
}

else if( User.IsInRole("PowerUser"))
{
Response.Redirect("PowerUser/Default.aspx");
}

}

sunn789
چهارشنبه 25 آبان 1390, 12:29 عصر
سلام و متشکر من این کد رو نوشتم که روی هاست کار میکنه اما روی کامپیوتر خودم بعد از وازد کزدن نام کاربریو پسورد کار نمیکنه
var tempUser = (from u in db.tblUsers
where u.UserName == txt_uid.Text & u.Password == txt_pwd.Text
select u).FirstOrDefault();
if (tempUser!= null)
{
FormsAuthentication.RedirectFromLoginPage(txt_uid. Text, chk_Remember.Checked);
}
else if (tempUser == null)
{
lblMessage.Text = "User name or password is not currect.";
}
}
<location path="Cpanel">
<system.web>
<authorization>
<deny users="*" />
</authorization>
</system.web>
</location>

fakhravari
چهارشنبه 25 آبان 1390, 13:39 عصر
<httpCookies httpOnlyCookies="true"/>
<sessionState cookieless="UseCookies"></sessionState>

sunn789
چهارشنبه 25 آبان 1390, 19:20 عصر
سلام
میشه بفرماید کجا بنویسم و این کدها چه میکنند؟

fakhravari
چهارشنبه 25 آبان 1390, 19:53 عصر
در کنفیگ
مدیریت سشن و کوکی
در مورد سشن یه سرچی کن . چون timeout داره

sunn789
چهارشنبه 25 آبان 1390, 19:59 عصر
سلام
اینجوری نوشتم اما تاثیری نداشت
<location path="Cpanel/Users.aspx">
<system.web>
<authorization>
<allow users="Admin" />
<deny users="*" />
</authorization>
<httpCookies httpOnlyCookies="true"/>
<sessionState cookieless="UseCookies"></sessionState>
</system.web>

fakhravari
چهارشنبه 25 آبان 1390, 20:40 عصر
وب کنفیگ بزارید.
چون برخورد نکردم که روی هاست کار کنه روی سیستم کار نکون. دقیقا برعکس برخورد کردم

fakhravari
چهارشنبه 25 آبان 1390, 23:49 عصر
با سلام
بله منم این مشکل داشتم شما باید زمانی که روی هاست میروید از کد زیر استفاده کنید برای rols

<roleManager enabled="true">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ConnectSring1" applicationName="/"/>
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider " applicationName="/"/>
</providers>
</roleManager>

در درون سیستم خود این قسمت را کامنت کنید و فقط از تیکه کد
<roleManager enabled="true" /> استفاده کنید.
چک کنید نتیجه رو اعلام کنید

sunn789
پنج شنبه 26 آبان 1390, 20:41 عصر
ضمن تشکر این کار هم جواب نداد
<roleManager enabled="true">
<!--<providers>
<clear />
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>-->
</roleManager>

sunn789
جمعه 27 آبان 1390, 17:31 عصر
سلام
از login control هم استفاده کردم امما نشد بعد از login بدون هیچ خطایی باز در همون صفحه login میمونم
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
bool authenticated = false;
authenticated = SiteLevelAuthunticatedMode(Login1.UserName,Login1. Password);
e.Authenticated = authenticated;

if (authenticated)
{
Response.Redirect("Default.aspx");
}
}

private bool SiteLevelAuthunticatedMode(string UaerName, string Password)
{
var tempUser = (from u in db.tblUsers
where u.UserName == Login1.UserName & u.Password == Login1.Password
select u).FirstOrDefault();
if (tempUser!= null)
{
return true;
}
else
{
return false;
}
}

sunn789
شنبه 28 آبان 1390, 19:06 عصر
دوستمون فرمودن که که تنظیمات web.config برای رجیستر کردن برنامه کافیه اما خوب اگه من یک کنترل login به صفحه اضافه کنم و بخوام به بانک اطلاعاتی خودم وصل کنم چه باید کنم ؟
ممنون میشم اگه جواب بدین اعصابمو به هم ریخته

محمد متاله
شنبه 28 آبان 1390, 20:25 عصر
با سلام
دوست گرامی اکثر کنترل های asp که استفاده می کنیم یک تعدادی event و یا رویداد دارند که یه محض روی دادن اتفاقی در برنامه توابعی را صدا می زنند مانند کنترل login
همان طور که در شکل زیر می بینید این کنترل چندین رویداد را مدیریت می کند از جمله رویداد loggedin که مورد نظر شماست

http://www.irupload.ir/images/82tynzoxrdx4fi11xd7x.jpg

با فرض اینکه قبلا کاربری در برنامه شما ثبت شده باشد فقط این مورد را می خواهیم بررسی کنم
در صفحه خالی از تب Login یک کنتزل Login را به صفحه اضافه کنید و نام آن را مثلا userLogin قرار دهید
تا اینجا تگهای کنترل asp به این صورت هست
<asp:Login dir="rtl" ID="userLogin" runat="server">
</asp:Login>

در قسمت سمت راست که پنجره Properties هست وارد تب event ها شوید (با یک علامت رعد و برق eventها مشخص شده است)
سپس در textBox روبروی logedIn دوبار کلیک کنید تا تابعی در صفحه Code Behind برای مدیریت رویداد LoggedIn ساخته شود

تا اینجای کار تگ های مربوط به کنترل Login به صورت زیر می باشد.
<asp:Login dir="rtl" ID="userLogin" runat="server" onloggedin="userLogin_LoggedIn">
</asp:Login>

حال می توانید در این تابع مثلا کدهای زیر را وارد کنید تا به محض اینکه کاربر لاگین کرده باشد به صفحه ای که در اینجا مشخص کرده اید redirect a,n
protected void userLogin_LoggedIn(object sender, EventArgs e)
{
string url = Request.QueryString["pid"];
if (url == null)
{
Response.Redirect("admin/management.aspx");
}

else
{
Response.Redirect(url);
}
}

البته برای سادگی کار صفحه management را به عنوان صفحه ای که کاربر بعد از لاگین می بایست وارد شود را در نظر گرفته ام اما در کاربردهای واقعی می بایست شما در این تابع Role کاربری را که وارد شده را بدست آورده و بر حسب Role کاربر آن را به صفحه مختص خودش Redirect کنید و یا اینکه صفحه management.aspx را طوری طراحی کرده باشید که در page_load اش Role کاربر را و اینکه آیا Login کرده است را بدست آورید و بر حسب Role اش به تنظیماتی که اجازه دارد بتواند دسترسی داشته باشد

همچنین برای اینکه کنترل login را فارسی کنید می بایست بر روی مثلث بالای کنترل Login کلیک کنید و از پنجره باز شده گزینه Convert To Template زا بزنید و متن Label های این کنترل را به فارسی تغییر دهید

sunn789
شنبه 28 آبان 1390, 23:58 عصر
سلام
طبق گفته شما انجام دادم
private bool SiteLevelAuthunticatedMode(string UaerName, string Password)
{
var tempUser = (from u in db.tblUsers
where u.UserName == Login1.UserName & u.Password == Login1.Password
select u).FirstOrDefault();
if (tempUser!= null)
{
return true;
}
else
{
return false;
}
}

protected void Login1_LoggedIn(object sender, EventArgs e)
{
bool authenticated = false;
authenticated = SiteLevelAuthunticatedMode(Login1.UserName, Login1.Password);
if (authenticated)
{
Response.Redirect("Default.aspx");
}

}
اما خطایی که میده اینه

Your login attempt was not successful. Please try again.

sunn789
یک شنبه 29 آبان 1390, 23:19 عصر
راستش زیاد توی اینترنت گشتم اما اونچه پیدا کردم این بود که باید از رخداد authenticated استفاده کنم نه از رخداد OnlogedIn
اما باز خوشحال میشم اگه کمکم کنید از این دردسر بیرون بیام

محمد متاله
سه شنبه 01 آذر 1390, 00:29 صبح
فکر کنم بعد از اینکه دیتابیستان را در در سیستم خودتان ایجاد کرده اید Role و User هایی هم در سیستم لوکال ایجاد کرده اید درسته؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

اگه که این طور هست به دلیل اینکه در جداول دیتابیستان فیلدی به نام ApplicationNameوجود داره و مقدار این فیلد در سرور با مقدار آن در لوکال هاست شما متفاوت هست کاربران و نقش هایی که در لوکال ایجاد می کنید در سرور تشخیص داده نمی شه برای این کار باید در web.config برای profile و membership و rolemanager مقدار Application را برابر / قرار دهی
<membership>
<providers>
<clear />
<add name="AspNetSqlMembershipProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" passwordFormat="Clear" minRequiredNonalphanumericCharacters="0" minRequiredPasswordLength="3" />
</providers>
</membership>
<profile>
<providers>
<clear />
<add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</profile>
<roleManager enabled="true">
<providers>
<clear />
<add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>


همچنین مطمئنا connection String کنترل های Login را باید برابر کانکشن استرینگ هاستتان قرار دهید تا این کنترل بتوانند به دیتابیس هاستتان دسترسی داشته باشاند نامconnectionString ی که این کنترل ها استفاده می کنند LocalSqlServer هست و باید در هاست مقدار آن را به صورت زیر تنظیم کنید

<connectionStrings>
<remove name="LocalSqlServer" />
<add name="LocalSqlServer" connectionString="Data Source=.;Initial Catalog=MysiteConnection;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>

توجه توجه توجه """"""""""""توجه کنید که این نام connectionStgring را در کدهای بالایی نیز استفاده کرده ایم"""""""""""""""

ان شا الله که توضیحات مفید بوده باشد و مشکلتان حل شود

sunn789
سه شنبه 01 آذر 1390, 16:29 عصر
سلام و متشکر نه در زمان ایجاد پروژه از همون اول بانک رو روی سرور ایجاد میکنم نه روی کامپیوتر و چون قبلاً سیلور لایت و یا wpf استفاده میکردم در پروژه asp تازه کارم نه خیلی ولی در مورد بانک اطلاعاتی همون اول از roll استفاده نکرد یک پوشه به نام Cpanel در پروژه اضافه کردم و دسترسی رو در فایل web.config برای همه محدود کردم مگر اینکه از بانک اطلاعاتی مدیران نام و نا کاربری رو درست وارد کنند
این هم کل فایل web.config
<?xml version="1.0"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<connectionStrings>
<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\asp netdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />
<add name="mydomains_NewInternationalEntities" connectionString="metadata=res://*/Model.NovinModel.csdl|res://*/Model.NovinModel.ssdl|res://*/Model.NovinModel.msl;provider=System.Data.SqlClien t;provider connection string='Data Source=&quot;***.***.***.***\SQL2008&quot;;Initial Catalog=mydomains_NewInternational;Persist Security Info=True;User ID=*****;Password=**************;MultipleActiveRes ultSets=True'" providerName="System.Data.EntityClient" />
</connectionStrings>
<system.web>
<customErrors mode="Off" />
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>
</compilation>
<authentication mode="Forms">
<forms
name="NovinCooki"
loginUrl="~/Cpanel/Login.aspx"
timeout="2880"
/>

<!--<forms loginUrl="~/Account/Login.aspx" timeout="2880" />-->
</authentication>
<membership defaultProvider="AspNetSqlMembershipProvider">
<providers>
<clear />
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="ApplicationServices"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="true"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
applicationName="/" />
</providers>
</membership>
<profile>
<providers>
<clear />
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
</providers>
</profile>
<roleManager enabled="true">
<providers>
<clear />
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
</system.web>
<location path="Cpanel">
<system.web>
<authorization>
<deny users="*" />
</authorization>
</system.web>
</location>
<location path="Cpanel/Users.aspx">
<system.web>
<authorization>
<allow users="Admin" />
<deny users="*" />
</authorization>
<httpCookies httpOnlyCookies="true"/>
<sessionState cookieless="UseCookies"></sessionState>
</system.web>
<system.web>
<siteMap defaultProvider="XmlSiteMapProvider">
<providers>
<add name="cpSiteMap" type="System.Web.XmlSiteMapProvider" siteMapFile="Cpanel/Cp.sitemap"/>
</providers>
</siteMap>
</system.web>
</location>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
</configuration>