مشكله في كود c#

يزيد • منذ 5 سنوات

السلام عليكم ورحمه الله وبركاته

 

قمت بعمل كابتشا بلغه c# وتحويلها الى ويب يوزر كنترول 

ولكن صادفني مشكله وهي ان الكابتشا تحفظ اخر كابتشا تم توليدها ولو دخلت موقع الويب الذي وضعت فيه الكابتشا من جهازين سوف يحفظ اخر كابتشا تم توليدها فقط

 

ولو وضعت ٢ كابتشا بصفحه واحده يتم توليد كابتشا واحده وتاتي ال ٢ كابتشا متطابقتين تماماً

 

اريد جعل الكابتشا ديناميكيه ولو وضعت ٢ كابتشا بالصفحه الواحده يتم التعامل مع كل واحده على حدا

 

وهذا كود الكابتشا

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Text;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Captcha : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Bitmap objBMP = new System.Drawing.Bitmap(50, 20);
        Graphics objGraphics = System.Drawing.Graphics.FromImage(objBMP);
        objGraphics.Clear(Color.DarkGreen);
        objGraphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixel;
        Font objFont = new Font("Arial", 8, FontStyle.Strikeout);
        String randomStr = "";
        int[] myIntArray = new int[6];
        int x;
        Random autoRand = new Random();
        for (x = 0; x < 6; x++)
        {
            myIntArray[x] = System.Convert.ToInt32(autoRand.Next(0, 9));
            randomStr += (myIntArray[x].ToString());

        }
        Session.Add("randomStr", randomStr);
        objGraphics.RotateTransform(-7f);
        objGraphics.DrawString(randomStr, objFont, Brushes.White, 4, 5);
        Response.ContentType = "image/GIF";
        objBMP.Save(Response.OutputStream, ImageFormat.Gif);
        objFont.Dispose();
        objGraphics.Dispose();
        objBMP.Dispose();

    }
}

 

كلمات دليلية: c# captcha

ساعد بالإجابة

"إن في قضاء حوائج الناس لذة لا يَعرفها إلا من جربها، فافعل الخير مهما استصغرته فإنك لا تدري أي حسنة تدخلك الجنة."

الإجابات (1)

Abdullah Alhariri • منذ 5 سنوات

وعليكم السلام ورحمة الله وبركاته

عند وضع الكابتشا في  ال session في المرة الأولى أنت تقوم بإضفة randomStr إلى ال sesstion أما في المرة الثانية فأنت تقوم بتعديل ال value الخاصة به

في هذا السطر أتوقع هنا المشكلة

Session.Add("randomStr", randomStr);

إن كانت هذه هي المشكلة فعلاً : 

حل المشكلة بطرق كثيرة منها وأنا هذا اللي قمت بعمله مرة :

في ال session أقوم بتخزين كابتشا واحدة فقط وعند طلب العميل لأخرى يتم ذلك عن طريق ال Ajax

حل آخر يكون في الصفحة عداد كل كابتشا يزيد هذا العداد ويضاف إلى ال key الخاص بال session مثال : 

int count = 0;

// توليد الكابتشا وزيادة العداد بواحد

Session("randomStr" + count,randomStr);

 أتمنى أن تكون قد وصلت الفكرة

بالتوفيق إن شاء الله

يزيد: للاسف طبقة هذا الحل ولكن لم يجدي نفعاً

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !