الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة بالموقع عند دخول اكثر من مستخدم عليه

مغلق
بدأه yousef_2000 في 19 أغسطس 2007 · 6 رد · 772 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي مشكلة بالموقع عند دخول اكثر من مستخدم عليه، فالصفحة الرئيسية بالموقع هي صفحة الدخول ، حيث يكتب المستخدم اسمه وكلمة المرور، ويتم نقله في حالة تطابق بياناته مع المخزنة بقاعدة البيانات، إلى هنا لا توجد مشكلة ، ولكن المشكلة تحدث انه كل المستخدمين يقوموا بعمل استفسارات وطلب اشياء من قاعدة البيانات ، وبيانات المستخدم الذي دخل أخيراً هي التي ستكون ظاهرة لجميع المستخدمين ، بالرغم من استخدامي للسيشن والكوكيز والتيكت .

فهل من طريقة لجعل لكل مستخدم نسخة خاصة به من الموقع عند التنفيذ أو هل هناك طريقة ما لجعل كل مستخدم يعمل على متغيراته الخاصة به.

وعند تركي للصفحة الموقع مفتوحة لمدة ، وعند محاولتي الاستمرار فى التصفح تظهر رسالة الخطأ التالية

[HttpException (0x80004005): Unable to validate data.]

وشكراً جزيلاً

السلام عليكم

#2

هلا وضعت كودا ما أو مثلا أو صفحة

لأن الكلام السابق مستحيل الحدوث في حالة كان شرحك مطابقا لعملك

#3
اقتباس
فهل من طريقة لجعل لكل مستخدم نسخة خاصة به من الموقع

بالفعل كل مستخدم لة نسختة الخاصة من الموقع

Post Back Is My Enemy And JavaScript Is my Weapon

#4

بسم الله الرحمن الرحيم

هذا ما أود التحدث عنه بعدما إنقلت من الجافا للعمل بال دوت نيت.............

الموضوع كالأتي ( سوف أحدث من منظور الجافا الذي أعتقد أنه ينطبق علي الدوت نيت ) :

كل أوبجكت لها متغيرات و دوال ، و هذه الدوال بها متغيرات محليه ( local variables )

عند تحميل متغير في الذاكره فإن متغيرات الكائن ( الأوبجكت ) و المتغيرات المحليه الغير الأوليه ( non-primitive variables ) و التي هي المتغيرات المحليه التي ليست من الأنواع الأوليه مثل int, char, double , ....... فإن كا ذلك يتم تحميله في ال heap حيث يشاركه ال threads الخاصه بالكائن فيما بينهم ، بينما يكون لكل thread قيمه منفصله من المتغيرات المحليه الأوليه ( primitive variables )

فعند إستخدام صفحه ويب ( و هي طبعا كائن ) و تعريف متغيرات لهذا الكائن ( أي متغيرات غير محليه ) فإن هذه المتغيرات يتم مشاركتها بين كل ال threads الموجوده ، أي بين كل المستخدمين لهذه الصفحه في الوقت الواحد و بالتالي فإن كل المستخدمين سوف يشاركو قيمة المتغيرات لأحدهم ( لاحظ أن هذه المتغيرات هي متغيرات للكائن أي instance vaiables و ليست متغيرات للفئه class variables .

و أعتقد للخروج من هذه المشكله هو تجنب تعريف متغيرات علي مدي الكائن ( instance variables ) في الكائنات التي يستخدمها أكثر من مستخدم في نفس الوقت ( يستنسخ منها أكثر من thread في نفس الوقت ).

وبالتالي يتم تحويل الكود من هذه الشكل :

class page1 : xx.xx.xx {

// logical error : will be shared between threads
private User user;


public void page_load (.......){
	user = session["userObj"];
	lblName.Text = user.Name;

}
..
...
public void button1_click ( ..............){
	user.BuyProduct ( prodNametxt.Text );
}

}

إلي هذا الشكل :

class page1 : xx.xx.xx {



public void page_load (.......){
	User user = null;
	user = session["userObj"];
	lblName.Text = user.Name;

}
..
...
public void button1_click ( ..............){
	User user = null;
	user = session["userObj"];
	user.BuyProduct ( prodNametxt.Text );
}

}
#5

وددت لو أحد خبراء الدوت نيت زكى كلامي

أو حتي إعترض !!!!!!!!!!!!!!!

#6

عزيزي الأخ مبتدئ (محترف) الجافا الكريم

سأرد عليك بالكلام التالي:

في عالم برمجة الويب هنالك بعض الاختلاف سأوضحها لك باختصار:

1- يعمل تطبيق الويب مع أول طلب له حيث يحجز ما يدعى Application Domain ضمن ذاكرة السيرفر يعمل خلالها

من هذه العبارة نفهم أن العنصر Application هو (Pool) مشتركة لجميع طلبات التطبيق

2- لكل طلب جلسة عمل مختلفة عن الآخر . أي بمعنى : أنه لكل متصفح عنصر يدعى Session يتكون داخل نطاق خاص به لكل متصفح أو بعبارة تقنية أكثر : SessionId

3- من هنا نرى أن العنصر المنشئة من كلاسات تعمل ضمن Heap ضمن نطاقها المحدد

فاذا أنشئ التطبيق عنصرا معينا UserObject ووضعه ضمن Session فهذا يعني أن هذا الInstance موجود فقط في نطاق Session الخاص بالمتصفح الذي طلبها

ومن هنا جاءت فكرة Session وعمليات Login وغيرها من Profiling التي تخزن القيم على مستوى الجلسة لكل شخص

أنت في كودك السابق كتبت كودا سيعطي نفس النتيجة في كلا الحالتين (مع اضافة عملية cast المنسية)

لذلك أرجو من الأخ أن يعطينا كودا نستطيع من خلاله معرفة الخطأ

...أرجو أن تكون الصورة قد توضحت قليلا

تم تعديل هذه المشاركة بواسطة Arwany في 25 أغسطس 2007 في 09:06

#7

أخي العزيز Arwany

أعتقدك ام تفهم قصدي،،،،

أنا تحدثت من منظور ، و أنت رددت من منظور أخر.....

أنا تكلمت من منظور ال Threads و أنت تتكلم من منظور ال session, request, application scopes .

أرجو منك أن تعيد قراءة ردي،

و فقني الله و إياك لخير ما يحب و يرضي

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…