PDA

View Full Version : سوال: استفاده از Captcha در لاگین خود asp



m.toosi
پنج شنبه 01 تیر 1391, 18:18 عصر
من میخوام یک captha در صفحه لاگین خودم درست کنم؟؟؟
و همچنین login سایتمو بوسیله خود Asp درست کردم
میشه بفرمایید به چه صورت عمل کنم
البته کد های captha زیاد دارم
ولی نمیدونم که طریقه کار اون در لاگین خود Asp چه جوری استفاده میشه؟؟؟؟

ممنون از راهنمایی دوستان

m.toosi
جمعه 02 تیر 1391, 23:05 عصر
کسی پیدا نمیشه یک راهنمایی کنه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
من چندین Captha رو پیدا کردم ولی نتونستم ازشون استفاده کنم
یک مشکلم این هست که نمیدونم چه جوری اون captcha رو به سایتم ارتباط بدم؟
یعنی بگم وقتی کلمه مورد نظر زده شد وارد بخش مورد نظر بشو
لطفا یکی راهنمایی کنه

باتشکر

TeacherMath
شنبه 03 تیر 1391, 00:00 صبح
باید از سیشن استفاده کنید.

<asp:Login ID="LoginUser" runat="server" EnableViewState="false" RenderOuterTable="false">
<LayoutTemplate>
<span class="failureNotification">
<asp:Literal ID="FailureText" runat="server"></asp:Literal>
</span>
<asp:ValidationSummary ID="LoginUserValidationSummary" runat="server" CssClass="failureNotification"
ValidationGroup="LoginUserValidationGroup"/>
<div class="accountInfo">
<fieldset class="login">
<legend>Account Information</legend>
<p>
<asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">Username:</asp:Label>
<asp:TextBox ID="UserName" runat="server" CssClass="textEntry"></asp:TextBox>
<asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName"
CssClass="failureNotification" ErrorMessage="User Name is required." ToolTip="User Name is required."
ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
</p>
<p>
<asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Password:</asp:Label>
<asp:TextBox ID="Password" runat="server" CssClass="passwordEntry" TextMode="Password"></asp:TextBox>
<asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password"
CssClass="failureNotification" ErrorMessage="Password is required." ToolTip="Password is required."
ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
</p>
<p>
<asp:CheckBox ID="RememberMe" runat="server"/>
<asp:Label ID="RememberMeLabel" runat="server" AssociatedControlID="RememberMe" CssClass="inline">Keep me logged in</asp:Label>
</p>
<p>
<asp:Image id="ImgCapcha" runat="server" /><br />
<asp:TextBox runat="server" ID="txtCapcha" /><asp:CustomValidator ID="CustomValidator1"
runat="server" ErrorMessage="CustomValidator">*</asp:CustomValidator>
</p>
</fieldset>
<p class="submitButton">
<asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Log In" ValidationGroup="LoginUserValidationGroup"/>
</p>
</div>
</LayoutTemplate>
</asp:Login>

m.toosi
شنبه 03 تیر 1391, 19:27 عصر
میشه بیشتر توضیح بدید
من چیز زیادی از این نفهمیدم
خوب از لاگین خود aSP استفاده کردی ولی Capthca چیشد؟
یم خرده توضیح بده
چه کنم؟

TeacherMath
شنبه 03 تیر 1391, 20:52 عصر
این یه نمونه است .از آن استفاده کنید و باگهای آن را بیابید تا رفع کنم.

dorparasti
یک شنبه 04 تیر 1391, 01:33 صبح
توی این صفحه (http://www.4guysfromrolla.com/articles/060706-1.aspx) توضیح کاملی درباره این مسئله داده .

TeacherMath
سه شنبه 06 تیر 1391, 09:28 صبح
ورژن دوم :

m.toosi
چهارشنبه 07 تیر 1391, 16:22 عصر
سلام دوست من
ممنون این captcha به خوبی در لوکال کار می کنه!
ولی وقتی uploade کردم رو هاست دیگه عکسی captcha رو نشون نمیده
نمیدونم چرا؟
و خوب تا زمانیکه عدد مورد نظر رو نزنم وارد سایت نمیشه
وقتی هم که عدد الکی میزنم
خطا میده و میگه
Object reference not set to an instance of an object.
و همچنین این خط رو قرمز می کنه
If args.Value.ToString() = Session("CapchaCode").ToString() Then
میشه راهنمایی کنید
ممنون

TeacherMath
چهارشنبه 07 تیر 1391, 16:48 عصر
مشکل از session است . آن را به چند ثانیه تنظیم کردین . session در سمت سرور ذخیره نمیشه.

TeacherMath
چهارشنبه 07 تیر 1391, 16:56 عصر
از نسخه دوم استفاده کنید.
(http://barnamenevis.org/attachment.php?attachmentid=88751&d=1340684902)

TeacherMath
چهارشنبه 07 تیر 1391, 16:59 عصر
آدرس سایتتون چیه

m.toosi
چهارشنبه 07 تیر 1391, 20:11 عصر
من در Sesion_end نوشتم
Session.Timeout = 1
فقط همینو نوشتم

دوست عزیز منم از مثال دوم استفاده کردم ولی متاسفانه اینجوریه

TeacherMath
چهارشنبه 07 تیر 1391, 22:28 عصر
چون آدرس شما :http://pars-residential.ir.armita.mashhadhost.com/loginmanager.aspx

آدر عکس را از :

src="Account/Login.aspx?Capcha=3EFA6D08-5ABA-4287-815E-56B871CF76D6"
به :

src="loginmanager.aspx?Capcha=3EFA6D08-5ABA-4287-815E-56B871CF76D6"

تغییر دهید.

TeacherMath
چهارشنبه 07 تیر 1391, 22:31 عصر
من در Sesion_end نوشتم
Session.Timeout = 1




چرا 1 دقیقه حداقل 20 دقیقه بهتر است.

m.toosi
پنج شنبه 08 تیر 1391, 13:38 عصر
ممنون آدرس عکسو تغییر دادم
مشکل باز شدن عکس هم برطرف شد

فقط مشکل Session هست که وقتی وارد میشم از این خط خطا میگیره
If args.Value.ToString() = Session("CapchaCode").ToString() Then

نمیدونم دقیق چکار کنم
زمانش از 1 دقیقه تغییر دادم به 20 دقیقه
دیگه جکار کنم؟

m.toosi
شنبه 10 تیر 1391, 00:56 صبح
کسی میدونه من باید چکار کنم واسه رفع خطای If args.Value.ToString() = Session("CapchaCode").ToString() The ؟؟؟؟؟

m.toosi
شنبه 10 تیر 1391, 13:47 عصر
مشکلش برطرف شد
اینجوری بود

If args.Value.ToString() = Session("CapchaCode").ToString() Then
args.IsValid = True
Else
args.IsValid = False

ShowCapcha()
End If


اینجوری نوشتیم درست شد البته به کمک آقای TeacherMath
Dim Capcha As String = If(Session("CapchaCode") IsNot Nothing, Session("CapchaCode").ToString(), "")
If args.Value.ToString() = Capcha Then
args.IsValid = True
Else
args.IsValid = False

ShowCapcha()
End If

دوست خوبم آقای fakhravari هم گفتن با try-catch بنویسم که اگر مشکلی داشت میشه اونجوری هم نوشت
ممنون از همه دوستان

TeacherMath
دوشنبه 12 تیر 1391, 21:47 عصر
نسخه سوم :

پروگرامنویس
دوشنبه 10 تیر 1392, 18:29 عصر
سلام منم با سشن مشکل شما رو دارم خواهشن کمک کنید خیلی گیرم!

من توی پروژم دوجا از سشن بهره بردم یکی واسه لاگین کردن ادمین و یکی هم برای تولید captcha برای صفحه دیدگاه های کاربران.نکته انجاس که همیشه با این خطا روبرو نمیشم و زمانیکه این پیغام میاد یا باید بک کنم و لاگ اوت شم یا کلا پروژه رو از نو ران کنم و اینکه معلوم نیست منطق این پیغام چیه چون من timeout سشن رو روی 60 دقیقه گذاشتم و این خطا خیلی زودتر نشون داده میشه من تایم اوت رو هم توی کد نویسی آزمایش کردم و هم توی وب کانفیگ اما انگار ایراد از این نیست!براتون پیکره و کدهای هر دو رو میزارم اگه کمک کنید بسیار سپاسگزار میشم!
پیکره رخ دادن پیغام سشن ادمین:
http://upcity.ir/images2/58269565349430742353.png
کدهای متد لود و دکمه صفحه لاگین:


protected void Page_Load(object sender, EventArgs e)
{
if (Session["adm"] != null && Session["rle"].ToString() == "mg")
{
Response.Redirect("profile.aspx");
return;
}

//if (Session["adm"] != null && Session["rle"].ToString() == "wr")
//{
// Response.Redirect("wprofile.aspx");
// return;
//}
}
protected void btnlog_Click(object sender, EventArgs e)
{
Mngr mg = new Mngr();
mg.UserName = txtuser.Text;
mg.Password = txtpass.Text;
bool b = mg.LoginMngr();
if (b==true)
{
if (mg.State == "پویا")
{
if (mg.Role == "سرپرست")
{
Session.Add("adm", txtuser.Text);
//Session.Timeout = 60;
Response.Redirect(@"profile.aspx");
return;
}
//else
//{
// Session.Add("adm", txtuser.Text);
// Session.Add("rle", "wr");
// Session.Timeout = 60;
// Response.Redirect(@"wprofile.aspx");
// return;
//}
}
else
lblLog.Text = "حساب کاربری شما بسته شده است،برای چرایی آن با سرپرست سایت تماس بگیرید";
}
else
{
lblLog.Text = "نام کاربری / گذرواژه درست نمی باشد!";
}
}

کدهای متد لود مسترپیج:


if (Session["adm"] == null)
{
Response.Redirect(@"login.aspx");
return;
}
Mngr mg = new Mngr();
mg.UserName = Session["adm"].ToString();
mg.SelectInfo();

پیکره پیغام خطای مربوط به سشن captcha
http://upload7.ir/images/81176124488098193429.png
سناریوی تولید capcha: توی یه صفحه یه نوشته تصادفی رو تولید میکنم و اونو به یه عکس میدم و بعد به وسیله سشن پاسش میدم به خاصیت سورس شی ایمیج در صفحه دیدگاهها.
کد متد لود صفحه تولید captcha:

protected void Page_Load(object sender, EventArgs e)
{
//Random
string[] cpt = {"blue","green","black","white","tehran","semnan", "esfahan","shiraz","tabriz","ahvaz" };
Random r = new Random();
int num = r.Next(100, 1000);
int i = r.Next(0, 9);
string v = cpt[i] + num.ToString();
Session.Add("cpch", v);
//
//load image
string path = Server.MapPath(".");
System.Drawing.Image mg= System.Drawing.Image.FromFile(path+"\\img\\capcha. png");
//
//Create Graphic
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(mg);
//
//Wright
Font f = new Font("Arial", 12, FontStyle.Bold);
g.DrawString(v, f, Brushes.Blue, 2, 5);
g.DrawLine(Pens.Black, 0, 5, 100, 35);
//
//stream
Stream st = new MemoryStream();
mg.Save(st, System.Drawing.Imaging.ImageFormat.Png);
//
//convert stream to byte[]
st.Position = 0;
byte[] b = new byte[st.Length];
st.Read(b, 0, b.Length);

Response.Clear();
Response.ContentType = "image/png";
Response.OutputStream.Write(b, 0, b.Length);
Response.End();

}
متد لود و دکمه صفحه دیدگاه ها:

protected void Page_Load(object sender, EventArgs e)
{
File fl = new File();
Payam pm = new Payam();
if (Request["nc"] == null)
{
fl.ID = Int32.Parse(Request["fid"]);
pm.pstID = Request["fid"];
}
else
{
fl.ID = Int32.Parse(Request["nc"]);
pm.pstID = Request["nc"];
}

DataTable dt = fl.SelectPostsByID();
rptfle.DataSource = dt;
rptfle.DataBind();
DataTable dtc = pm.SelectCmntOk();
rptcmnt.DataSource = dtc;
rptcmnt.DataBind();
}


protected void btnCmnt_Click(object sender, EventArgs e)
{
string strc = Session["cpch"].ToString();
Session.Remove("cpch");
if (txtCapch.Text != strc)
{
lblmsg.Text = "کد امنیتی درست نیست!";
return;
}
else
{
Payam pm = new Payam();
pm.cName = txtName.Text;
pm.cCmnt = txtCmnt.Text;
pm.pstID = Request["fid"];
pm.AddCmnt();
Response.Redirect("onefile.aspx?nc=" + Request["fid"]);
lblmsg.Text = "دیدگاه شما با پیروزی در سایت نگاشته شد!";
return;
}
}