PDA

View Full Version : سوال: نحوه ایجاد مرا بخاطر بسپار در membership چگونه است؟



aspdotnet1368
شنبه 17 تیر 1391, 01:35 صبح
سلام من یه فرم لاگین درست کردم که یه چک باکس داره. می خوام وقتی کاربر تیک چک باکس رو بزنه لاگین کنه و دیگه خارج نشه. مثل گوگل که وقتی لاگین می کنیم دیگه خارج نمی شیم. من از کد زیر استفاده کردم ولی ظاهرا بعد از سی دقیقه خارج میشه.
if (Membership.ValidateUser("UserName", "PassWord"))

{

FormsAuthentication.SetAuthCookie("UserName", true);

}

monika
شنبه 17 تیر 1391, 08:08 صبح
protected void btnLogin_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
FormsAuthentication.RedirectFromLoginPage(txtUsern ame.Text,chkRemember .Checked );
}
}

monika
شنبه 17 تیر 1391, 08:20 صبح
دوست عزیز اگه از linq وentity Frame work استفاده می کنی مراحل زیر رو واسه اهراز هویت کاربران دنباله روی کن

1)اول یک کلاس می سازیم با کد زیر که اسم کلاسمون رو هم مثلا:دDrRoleProvider.csدرنظرمی گیریم




using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;

namespace test.Classes
{
public class DrRoleProvider:RoleProvider
{
DrEntities c = new DrEntities();
public override void AddUsersToRoles(string[] usernames, string[] roleNames)
{
throw new NotImplementedException();
}

public override string ApplicationName
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}

public override void CreateRole(string roleName)
{
throw new NotImplementedException();
}

public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
{
throw new NotImplementedException();
}

public override string[] FindUsersInRole(string roleName, string usernameToMatch)
{
throw new NotImplementedException();
}

public override string[] GetAllRoles()
{
throw new NotImplementedException();
}

public override string[] GetRolesForUser(string username)
{
return (from u in c.Users
join r in c.Roles on u.RoleID equals r.RoleID
where u.Username == username
select r.RoleNameForSystem).ToArray();
}

public override string[] GetUsersInRole(string roleName)
{
throw new NotImplementedException();
}

public override bool IsUserInRole(string username, string roleName)
{
throw new NotImplementedException();
}

public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
{
throw new NotImplementedException();
}

public override bool RoleExists(string roleName)
{
throw new NotImplementedException();
}
}
}



2)در فایل Web.Config تنظیمات زیر رو اعمال می کنیم:


<roleManager enabled="true" defaultProvider="aspprovider">
<providers>
<clear />
<add name="aspprovider" type="test.Classes.DrRoleProvider" />
</providers>
</roleManager>
<authentication mode="Forms">
<forms name="testname" defaultUrl="~/Default.aspx" loginUrl="~/Login.aspx" timeout="43200" slidingExpiration="true" />

</authentication>


3)ودر صفحه Login.aspxکد Htmlبصورت زیر

<h2>ورود به سیستم</h2>
<table>
<tr>
<td>
نام کاربر:</td>
<td>
<asp:TextBox ID="txtUsername" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvUsername" runat="server"
ControlToValidate="txtUsername" Display="Dynamic"
ErrorMessage="لطفا نام کاربر را وارد کنید" ForeColor="Red">→</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td>
کلمه عبور:</td>
<td>
<asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvPassword" runat="server"
ControlToValidate="txtPassword" Display="Dynamic"
ErrorMessage="لطفا کلمه عبور را وارد کنید" ForeColor="Red">→</asp:RequiredFieldValidator>
<asp:CustomValidator ID="cvLogin" runat="server" Display="Dynamic"
ErrorMessage="نام کاربر یا کلمه عبور صحیح نیست" ForeColor="Red"
onservervalidate="cvLogin_ServerValidate">→</asp:CustomValidator>
</td>
</tr>
<tr>
<td>
&nbsp;</td>
<td>
<asp:CheckBox ID="chkRemember" runat="server"
Text="مشخصات من را به خاطر بسپار" />
</td>
</tr>
<tr>
<td>
&nbsp;</td>
<td>
<asp:Button ID="btnLogin" runat="server" onclick="btnLogin_Click"
Text="ورود به سیستم" />
</td>
</tr>
</table>


در قسمت Code Behind


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;

namespace test
{
public partial class SignIn : System.Web.UI.Page
{
DrEntities c = new DrEntities();
protected void Page_Load(object sender, EventArgs e)
{

}

protected void btnLogin_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
FormsAuthentication.RedirectFromLoginPage(txtUsern ame.Text,chkRemember .Checked );
}
}

protected void cvLogin_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = (from u in c.Users
where u.Username == txtUsername.Text && u.Password == txtPassword.Text
select u).Count() != 0;
}
}
}

monika
شنبه 17 تیر 1391, 08:21 صبح
من یک Sample آماده می کنم می تونید از اون کمک بگیرید

موفق باشید

aspdotnet1368
شنبه 17 تیر 1391, 11:40 صبح
ممنون از جوابتون. من می خوام از خود ممبرشیپ استفاده کنم. وگنه میشه دستی کوکیم انداخت. روش اولی که فرمودین فکر نکنم با روش خودم فرقی کنه. چون فقط بعد از لاگین کاربر رو به یک صفحه دیگه انتقال میده. درست می گم؟
من در حقیقت می خوام کوکی ایجاد شده منقضی نشه و همیشه یا حداقل به مدت زیاد کاربر نیازی به لاگین نداشته باشه. مثل همین فروم برنامه نویس.

monika
شنبه 17 تیر 1391, 13:38 عصر
درفایل web.configجاییکه timeout="43200" slidingExpiration="true" نوشته شده مشخص می کنه که کاربر به مدت یک ماه شناخته شده باشه این خاصیت رو timeoutتنظیم می کنه و خاصیت slidingExpiration="trueباعث می شه که بعدازمدتی که ما درtimeout مشخص کردیم به صورت خودکار کاربر ناشناخته محسوب شه

این روش اهراز هویت روشیه که مدیر همین سایت آموزش دادن پس روش مطمعن و معتبریه

monika
پنج شنبه 26 مرداد 1391, 18:53 عصر
براتون پروژرو تا شب upload می کنم

dorparasti
پنج شنبه 26 مرداد 1391, 22:57 عصر
درفایل web.configجاییکه timeout="43200" slidingExpiration="true" نوشته شده مشخص می کنه که کاربر به مدت یک ماه شناخته شده باشه این خاصیت رو timeoutتنظیم می کنه و خاصیت slidingExpiration="trueباعث می شه که بعدازمدتی که ما درtimeout مشخص کردیم به صورت خودکار کاربر ناشناخته محسوب شه

این روش اهراز هویت روشیه که مدیر همین سایت آموزش دادن پس روش مطمعن و معتبریه



درسته . اما توصیه شده که در صورتی که ارتباط سرور و کلاینت توسط SSL امن نشده از true کردن slidingExpiration خودداری بشه و مدت زمان سشن هم کوتاه در نظر گرفته بشه .