آموزش Asp.NET

negin17h

مدیر تالارهای مهندسی کامپیوتر و رباتیکمتخصص #C
مدیر تالار
با سلام :gol:
بر حسب درخواست دوستان، تاپيک جديدی برای آموزش ASP.NET ایجاد میشه که امیدواریم با کمک دوستان، پیشرفت های خوبی حاصل شه :)

دوستان توجه داشته باشند کلیه ی پست های غير آموزشی و نامرتبط با موضوع بدون اطلاع قبلی، حذف خواهند شد :smile: و دوستان میتوانند سئوالات و مشکلات خود را در تاپيک آموزش ASP.NET (بررسی سئوالات و مشکلات) مطرح نمايند.

موفق باشید :gol:
 

A.S.Roma

عضو جدید
کاربر ممتاز
ظاهرا" این تاپیک داره کار خودشو شروع می کنه هر چند واسه دوستانی که C# نمی دونن یکم زوده.
به هر حال ...
بچگیام یک مطلب به عنون مقدمه برای شروع نوشتم که دوستانی که درک چندانی از ASp.NET ندارن باهاش آشنا بشن .
فکر می کنم واسه شروع بد نباشه بذارم دوستان بخونن .
اینکه ASP.NET چیست !؟ و اصلا" سایتهایی که با این تکنولوژی ساخته می شوند چه تفاوتی با سایتهای html دارند و ... آنقدر مطلب در اینترنت وجود دارد که بحث و تفصیل در این موضوعات خیلی جذاب نخواهد بود.

خیلی خلاصه و روان و عامیانه عرض کنم که در HTML طراح سایت Page را می سازد ( با استفاده از تگ ها ) و آن Page مدتها یک شکل می ماند ، هیچ گونه تعاملی بین کاربر و سایت وجود ندارد . کاربر صرفا" یک صفحه را مشاهده می کند و یا برخی از اطلاعات آنرا ذخیره می کند . نتیجتا" هیچ کس جز طراح سایت نمی تواند صفحه را تغییر دهد ( منو اضافه کند - بنر اضافه کند - چیزی حذف کند و ... )
اما در ASP شما می توانید با کاربر تعامل کنید. اطلاعات او را دریافت کنید. بر حسب اطلاعاتی که او وارد می کند عکس العمل متفاوتی نشان دهید . پانل مدیریت سایت بسازید تا admin سایت خود سایت را بدون هیچ گونه دانش طراحی وب بسازد و کلی موارد دیگر ... .

برای شروع به کار بد نیست بررسی کنیم که برای طراحی یک سایت با ASP.NET چه دانشی نیاز است.

مهمترین و کلیدی ترین مورد ، فراگیری یکی از دو زبان برنامه نویسی VB.NET یا C#.NET می باشد. بنا بر ادعای مایکروسافت این دو زبان معادل یکدیگرند و کدهای آنان به راحتی به یکدیگر تبدیل می شود اما همیشه در فروم های برنامه نویسی سر برتری یکی بر دیگری بحث و جدل است. شما خودتان به سلیقه خود یکی را انتخاب کنید.
VB.NET که از VB6 گرفته شده است و کاملا" شبیه آن است.
اما C#.NET از نظر سینتکس دستورات شبیه ++C و از نظر ساختار شبیه Java می باشد.


C#.NET و VB.NET هر کدام خود Course های جداگانه برای آموزش دارند و بسیار بسیار گسترده اند . مسلما" شما در حین برنامه نویسی web از کلیه قابلیتهای آنها استفاده نخواهید کرد . به نظر من تسلط بر مفاهیم برنامه نویسی شیء گرا کفایت می کند کما اینکه شما هر چه بیشتر C# یا VB بدانید دستتان در کدنویسی باز تر خواهد بود .


مورد بعدی آشنایی با تگ های HTML و همچنین CSS است که بتوانید ظاهر سایت را با آن بسازید .


مسلما" هر سایت دینامیکی نیازمند یک پایگاه داده ( دیتابیس ) می باشد . یک ASP.NET کار باید با مفاهیم ابتدایی دیتابیس ( نحوه ساخت جداول و ایجاد رابطه و کوئری گرفتن و ... ) آشنا باشد .
تسلط بر دستورات SQL لازمه برنامه نویسی web می باشد.


برای اینکه سایت حرفه ای و زیبا تر شود طراح سایت بایستی بتواند با Java Script کار کند . این مورد را اگر در نظر نگیریم نیز اتفاقی نخواهد افتاد و تنها شاید کارایی سایت کمی پایین آید . اما فراگیری Java Script نیز یک نقطه مثبت خواهد بود.

و در نهایت خود مفاهیم ASP.NET که شامل ابزارات کار و مفاهیم Client / Server و Session و ... می باشد.

خلاصه موارد به صورت فهرست وار :

  • C#.NET یا VB.NET
  • HTML & CSS
  • SQL
  • Java Script
 

A.S.Roma

عضو جدید
کاربر ممتاز
این مطلب هم پیدا کردم که به نظرم مناسب میاد اینجا بذارم :
همواره ايميل هاى زيادى بدستم رسيده است كه مى پرسند: بهترين راه يادگيرى ASP.NET چيست؟ يا اينكه براى يادگيرى ASP.NET از كجا بايد شروع كنيم؟ و سوالاتى از اين قبيل. در اين مقاله سعى كرده ام كه تجربيات خودم را در اين زمينه با شما در ميان بگذارم و احتمالاً بتوانم جوابى كاربردى و عملى به اين سوال بدهم. سوالى كه احتمالاً شما هم به دنبال جواب آن هستيد.

به نظر من به تعداد انسانها، راه براى يادگيرى ASP.NET هست! شوخى نمى كنم، جدى مى گويم. به نظر من هر شخصى روش يادگيرى خودش را دارد. فرقى هم نمى كند كه بخواهيد ASP.NET ياد بگيريد يا آشپزى يا هر چيز ديگري. شما همانطور كه اگر بخواهيد آشپزى ياد بگيريد ممكن است از كتاب، كلاس، سعى و خطا، تجربه و حتى از وب استفاده كنيد، براى ASP.NET و اصولا هر چيز ديگرى هم ممكن است از همين ابزار و راهها استفاده كنيد.

چيزى كه من مى خواهم بگويم توضيح واضحات است. اما چون خيلى ها سوال مى كنند ناچارم اشاره اى به اين موضوع داشته باشم. به نظر من بيشتر، افراد مبتدى و تازه كار هستند كه نياز دارند كه پاسخ اين سوال را بدانند چون كسانى كه به نوعى ASP.NET را ياد گرفته اند يا با آن آشنا هستند خود مى دانند كه چه كار بايد بكنند و چگونه ياد بگيرند.


كتاب

خيلى از افراد سوال مى كنند كه مثلا كدام كتاب خوب است؟ به عقيده من براى يك فرد تازه كار كه مى خواهد با الفباى كار آشنا شود، هر كتابى در زمينه آموزش مقدماتى و كليات ASP.NET خوب و مفيد است. حتى بسيارى از كتابهاى تخصصى هم فصلهاى اوليه خود را به آموزش و مرور مقدمات ASP.NET تخصيص مى دهند. پس دنبال كتاب خاصى نباشيد. اولين كتابى را كه بدست آورديد بنشينيد و بخوانيد. بالاخره هر كتابى هر چند سطح پائين هم كه باشد آنقدر مطلب دارد كه يك تازه كار را براى مدتها به خود مشغول كند.

حرفه‎اى ترها هم كه خود مى دانند دنبال چه هستند و چه كتابى به كارشان مى خورد. دقت داشته باشيد كه متاسفانه سطح كتابها جهت استفاده حرفه‎اى ها بسيار پائين است به گونه‎اى كه آنها معمولاً كتاب مورد نظر خود را نمى توانند پيدا نمى كنند. لابد نويسندگان فكر مى كنند كه حرفه‎اى ها نيازى به كتاب ندارند و آنقدر توانا هستند كه يا خودشان فكر كنند يا مطلب شان را در وب پيدا كنند. چيزى كه بحث بخش بعدى اين مقاله است.

به هرحال آنقدر در كتابهاى آموزشى ASP.NET در مورد فرم هاى وب و نحوه استفاده از ADO.NET براى ارتباط با بانك اطلاعاتى و XML گفته اند كه هيچگاه در مورد چگونگى طراحى ساختار و لايه هاى خود برنامه يا سايت چيزى گفته نشده است. مقوله اى كه بدون آن معمارى را مى ماند كه آجر و سنگ و سيمان دارد اما نقشه ندارد.


سايتهاى آموزشى

ابزار بعدى، استفاده از سايتهاى آموزشى موجود در وب هست. باور كنيد كه برخى مطالب ذكر شده در سايتهاى آموزشى را هيچ وقت در هيچ كتابى نخواهيد يافت و اصولا آنها هيچوقت چاپ نمى شوند. بخصوص زمانى كه داريد وارد قلمرو حرفه اى مى شويد. با بكارگيرى گوگل، اين گونه سايتها هيچوقت براى شما مخفى يا ناشناخته نمى مانند. به شرطى كه در انتخاب كليد واژه‎ى جستجوى خود دقت كنيد.

سايتى مثل W3Schools و بخش آموزش سريع يا QuickStart مايكروسافت مى توانند منابع خوبى از جنس دوره هاى آموزشى باشند. اما انتظار نداشته باشيد كه در ديگر سايتهاى آموزشى/مقاله‎اى ASP.NET بتوانيد دوره هاى منظم و مرحله به مرحله‎ى كلاسيك و جزوه اى پيدا كنيد. بيشتر سايتها پر هستند از مقاله هاى رنگارنگ و متنوع كه لزوما وحدت موضوعى نداشته و صرفاً برحسب نياز خود برنامه نويسان تهيه شده اند. من اينگونه سايتها و مطالب را براى دوران پس از مقدماتى توصيه مى كنم.

بيشتر اين سايتها داراى خبرنامه الكترونيكى رايگان مى باشند. با عضويت در آنها و دريافت مرتب تيتر مطالب شان، آنها را زير نظر بگيريد و اگر مقاله‎اى داشتند كه به كار شما مى خورد، به سراغش رفته و استفاده كنيد. اين مساله سبب مى شود كه شما مجبور نباشيد كه همواره به آن سايتها سر بزنيد يا همه مطالب شان را بخوانيد و يا احتمالا مقاله‎ى مفيدى را از دست بدهيد. از اين رو ست كه همواره بر داشتن خبرنامه‎ى الكترونيكى براى سايتها و عضويت افراد در آنها تاكيد شده است. خوشبختانه سايت IranASP.NET هم از همان روزهاى آغازين اين مهم را سرلوحه كار خود قرار داده است. دقت داشته باشيد كه شما هر چه جلوتر برويد و حرفه‎اى تر شويد، وقت كمترى براى مطالعه و يادگيرى خواهيد داشت. بخصوص اگر به حدى برسيد كه درگير يك كار يا پروژه هم بشويد!


كلاس

كلاس هاى آموزشى هم مى توانند مفيد باشند. به گونه اى كه در مدت زمان كوتاهى سرنخ مطالب جديدى را به شما مى دهند و گاهاً ممكن است مطلبى را مطرح كنند كه شما هيچ وقت در حالت خودآموزى به آن برخورد نكنيد. به كلاسهاى آموزشى صرفا به عنوان نقطه شروع نگاه كنيد و نه چيز ديگر. هيچ كلاسى نمى تواند ادعا كند كه شما را يك ماهه يا بيشتر به يك برنامه نويس حرفه اى وب تبديل مى كند كه اگر ادعا كرد خود معيار خوبى است جهت ميزان صداقت گردانندگان آن كلاس و سطح آن.

معمولاً شما نمى توانيد قبل از تشكيل يك كلاس به ميزان مفيد بودن آن براى يادگيريتان پى ببريد. هر چقدر هم از گردانندگان آن سوال كنيد، آنها آنقدر كلمات فنى و قلمبه سلمبه بلد هستند كه شما فكر كنيد بيسواد مطلق هستيد. نمى گويم كه همه‎ى كلاس ها اينگونه هستند و يا اينكه شما بدون تحقيق و بررسى به هر كلاسى برويد. اما مى گويم كه اندكى هم ريسك پذير باشيد چون ممكن است از هزينه و وقت تان آنگونه كه انتظار داشته باشيد در پايان كلاس بهره نبرده باشيد. اين را كاريش نمى توان كرد و از ملزومات كار است كه البته اشكالى هم ندارد و همين مساله خود براى شما نكته‎ى آموزشى خواهد شد اگرچه در زمينه ASP.NET هم نباشد!

از ديگر فوايد كلاس مى توان به امكان پيدا كردن دوست و يا همكار و مهم تر از همه پروژه اشاره نمود. خيلى از همكارهاى كارى و پروژه اى مى تواند از درون همين كلاس ها رقم بخورد چه براى دانشجويان چه براى شخص مدرس!


زبان زبان زبان

بله، زبان البته از نوع انگليسى آنقدر مهم است كه سه بار در عنوان اين بخش تكرار شود. اين را من براى شما كه فارسى زبان هستيد مى گويم. شما نمى توانيد يك برنامه نويس وب باشيد اما زبان انگليسى بخصوص در زمينه خواندن يا همان Reading را بلد نباشيد. چون شما نمى توانيد همه مطالب خود كه هيچ بلكه حتى كسرى از آن را هم به زبانى غير از انگليسى پيدا كنيد.

شما براى خواندن و يادگيرى به زبان نياز داريد. همه‎ى كتابها انگليسى هستند و آنهايى هم كه مثلاً ترجمه فارسى شده اند را خيلى جدى نگيريد. آنها بيشتر بدرد ناشرشان مى خورد و كمى هم مترجم شان و نه شما. شما بايد اصطلاحات را به شكل انگليسى شان ياد بگيريد و نه ترجمه هاى من در آوردى و عجيب و غريب فارسي. كتابهاى فارسى در اين زمينه را اغلب كسانى ترجمه مى كنند كه به نوعى ماشين ترجمه هستند و حتى ممكن است ندانند كه آنچه را ترجمه كرده اند به چه دردى مى خورد.

خوشبختانه مطالب فنى كامپيوترى نمى توانند داراى متون پيچيده و سخت انگليسى باشند. عمده‎ى كلمات كه اسامى خاص و اصطلاحات فنى هستند و بقيه هم افعال و كلمات ساده و معمولى زبان مى باشند. پس شما قرار نيست كه نمايشنامه‎ى شكسپير را بخوانيد.

همچنين شما براى برنامه نويسى تان و انتخاب اسامى متغيرها، كلاس ها و متدهاى مورد نيازتان بايد بتوانيد اسامى با مسمايى را انتخاب كنيد. شما بايد بتوانيد شرح يا كامنتى هر چند كوچك در لابلاى خطوط برنامه تان بنويسيد تا كد برنامه شما به يك غول دست نيافتنى تبديل نشود. شما بايد بتوانيد خيلى از برنامه هاى از پيش نوشته شده را بخوانيد و بفهميد. معنا و مفهموم اسامى انتخاب شده براى كلاس ها و متدها از ديد زندگى روزمره به فهم بيشتر شما از آن برنامه كمك مى كند. همه‎ى اينها با دانستن زبان انگليسى ميسر است.

پس لطفاً قبل از ياد گرفتن ASP.NET و يا اينكه چگونه بايد از ADO.NET استفاده كرد از زبان خود مطمئن شويد. اگر ضعيف هستيد اول آن را تقويت كنيد و بعداً بيائيد.


پيش نياز

توجه داشته باشيد كه جهت يادگيرى ASP.NET كه يك تكنولوژى جهت ساخت برنامه هاى تحت وب است و نه يك زبان برنامه نويسى، شما به پيش نيازهاى زياد و متنوعى نياز داريد. باز تكرار مى كنم كه ASP.NET تكنولوژى است نه زبان برنامه نويسي. مفاهيم و مسائل زيادى جهت به كارگيرى اين تكنولوژى مورد نياز است. بدون تسلط و نه صرفاً اطلاع از آنها شما نمى توانيد ASP.NET را ياد بگيريد. مواردى كه به ذهنم مى رسد را در زير فهرست وار به اطلاع شما رسانده ام. اگرچه ممكن است ليست كاملى نباشد ولى حداقل مهم ترها را دارد.

- شما بايد يك برنامه نويس كامپيوتر باشيد.
- شما بايد بر مفاهيم شئ گرايى مسلط باشيد.
- شما بايد يكى از زبانهاى خانواده ++C يا Visual Basic را بدانيد.
- شما بايد بانك اطلاعاتى و زبان SQL را بدانيد.
- شما بايد مفاهيم وب و برنامه نويسى وب را بدانيد.
- شما بايد كار با محيط هاى Visual را بدانيد.
- شما بايد IIS را بشناسيد و فرق وب سايت و Virtual Directory و تنظيمات آن را بدانيد.
- شما بايد يك ويندوز-سرور كار خوب باشيد.
- كمى هم شناخت و ذوق هنرى در طراحى صفحات و گرافيك وب داشته باشيد.
- ...
- شما بايد عاشق مايكروسافت باشيد!


بهترين راه يادگيرى ASP.NET
حالا مى خواهم به اصل سوال پاسخ دهم. شما داريد از يك فوت كوزه گرى نه چندان مخفى مطلع مى شويد. راه هاى مختلف را گفتم اما حالا مى خواهم بهترين آن را بگويم. بهترين راه يادگيرى ASP.NET چيست؟

پاسخ: كار

شما از موارد فوق تنها مى توانيد مقدمات را ياد بگيريد يا اينكه گوش و چشم تان را با واژه هايى آشنا كنيد. براى ملكه شدن دانسته هايتان و حرفه‎اى بودن تان بايد كار كنيد. يعنى اينكه بايد برنامه بنويسيد. بايد درگير كار يا پروژه اى شويد. بايد زور بزنيد و درگير باشيد. بايد نيازمند باشيد. اگر از سر سيرى يا صرفاً براى پُز دادن دنبال چيزى هستيد مطمئن باشيد چيزى ياد نمى گيريد مگر به اندازه همان پُز دادن.

شما نياز داريد كه همه چيز را حتى مقدمات را هم عملاً و شخصاً تجربه كنيد. اين مى توانيد از طريق تعريف پروژه هاى من درآوردى شخصى باشد يا يك كار تجارى واقعي. شما بايد در حين كار شلاق بخوريد تا فولاد آبديده شويد! هيچ چيز بجز يك كار جدى و واقعى نمى تواند به شما چيز ياد بدهد. اين چيزى است كه خود من به شخصه تجربه كرده ام. در اين چند سال كتاب و سايتهاى فراوانى را خواندم و مقالات زيادى را نوشتم اما هيچ يك به اندازه‎ى يك پروژه جدى سنگين به من آموزش نداد. بعبارت ديگر همه آن خواندنها لازم هستند ولى كافى نيستند. دوباره دقت كنيد: لازم هستند. بيهوده نيستند. اما كافى هم نيستند.

جهت يادگرفتن ASP.NET شما بايد پرحوصله، وقت دار، سمج، فعال، علاقه مند و پيگير باشيد
 

sam66

عضو جدید
لیست دوستانی که در این دوره شرکت کردند:gol:
ali_vb
secret_f
salam.6864
fatima a
masoumeh_f
maSoUd-5
1007
mobinak
A.S.Roma
linux_0011
sam66
با همکاری و نظارت negin17h :gol:
دوستان لطف کنند مرتبا به این تاپیک و تاپیک رفع اشکال سر بزنند ،البته اگر پست جدید آموزشی گذاشته شد به دوستان اطلاع میدیم.
 
آخرین ویرایش:

sam66

عضو جدید
فصل اول

فایل ضمیمه فصل اول آموزش asp.net با عنوان " آشنایی با IIS و Net Framework برای فراهم کردن مقدمات برنامه نویسی Asp.Net " هست که میتونید دانلود کنید.
یک فایل pdf 16 صفحه ای که تنظیمات IIS رو توضیح داده ، لطف کنید مطالعه کنید و تنظیمات مربوطه رو انجام بدید تا به فصل دوم که شروع اصلیه بپردازیم:gol:
ویژوال استودیو 2008 هم که نصب کردید همتون :smile:
اگر به مشکلی برخوردید یا نظری دارید در این تاپیک مطرح کنید تا بتونیم به یادگیری بهتر و بیشتر همدیگه کمک کنیم:smile:
در ضمن میتونید کل کتاب رو به صورت یکجا از اینترنت بگیرید، اما اینجا مبحث به مبحث جلو میریم که کاراتره :victory:

دوستان لطف کنید اینجا اگر پست آموزشی دارید بزنید در غیر اینصورت پستتون پاک خواهد شد، بحث و تبادل نظر در تاپیک مربوطه انجام شود :gol:
 

پیوست ها

  • asp_net_ch01_final.pdf
    618.3 کیلوبایت · بازدیدها: 0

sam66

عضو جدید
فصل دوم

فصل دوم

فصل دوم
[FONT=&quot]
این هم فصل دوم با عنوان [/FONT]
" آشنایی با مقدمات زبان برنامه نویسی شی گرای #c و ایجاد اولین برنامه ASP.NET "
[FONT=&quot]در این فصل در مورد [/FONT][FONT=&quot]NameSpaces[/FONT][FONT=&quot] ها یک توضیح مختصری داده و یکی دو تا برنامه ی ساده هم آورده که فایل اجرایی کل مثال های این کتاب رو هم ضمیمه کردم[/FONT]
[FONT=&quot]در ضمن پست بعدی هم توضیحات تکمیلی فضا نام ها در [/FONT][FONT=&quot]asp.net[/FONT][FONT=&quot] هست که پیشنهاد میکنم مطالعه کنید[/FONT]

[FONT=&quot]دوستان ببخشید من با ارسال پست مشکل داشتم بخاطر همین یک کمی دیر شد، اگر نظری دارید تو تاپیک بحث و گفتگو مطرح کنید :gol:[/FONT]
 

پیوست ها

  • asp_net_ch02_final.pdf
    355 کیلوبایت · بازدیدها: 0
  • sources.zip
    524.6 کیلوبایت · بازدیدها: 0

sam66

عضو جدید
فصل سوم

فصل سوم

فصل سوم

معرفی کنترل های html و نحوه کاربرد آنها در صفحات ASP.NET

این فصل خیلی راحته و زمان خاصی نمیبره ، اگر این سایت دیگه اذیت نکنه بعد از مطالعه این فصل های مقدماتی یک صفحه ی وب با هم طراحی میکنیم ;)
 

پیوست ها

  • asp_net_ch03_final.pdf
    312.9 کیلوبایت · بازدیدها: 0

sam66

عضو جدید
فصل چهارم

فصل چهارم

معرفی کنترل های وب و نحوه ی استفاده از آنها در صفحات ASP.NET

 

پیوست ها

  • asp_net_ch04_final.pdf
    616.4 کیلوبایت · بازدیدها: 0

zahra_1365

عضو جدید
سلام
من چندتا سوال داشتم، ممنون میشم اگه جواب بدین :D
موقع آپلود عکس چطور میتونم سایزشو کوچیک کنم؟
واینکه چطور میشه تاریخی که تو DB میلادی ذخیره شده رو تو صفحه وب به شمسی تبدیل کنم؟
 

aghafarzin

عضو جدید
سلام
من چندتا سوال داشتم، ممنون میشم اگه جواب بدین :D
موقع آپلود عکس چطور میتونم سایزشو کوچیک کنم؟
واینکه چطور میشه تاریخی که تو DB میلادی ذخیره شده رو تو صفحه وب به شمسی تبدیل کنم؟
دوست من جواب سوال اولتو می دم برو به این سایت و سایز عکستو تا نصف کم کن بدون اینکه از کیفیت عکست کم بشه.ولی این سایت فقط فرمت jpeg رو ساپرت می کنه: www.jpegmini.com
 

avandweb

عضو جدید
نمونه برنامه های آموزش Asp.net و طراحی سایت

نمونه برنامه های آموزش Asp.net و طراحی سایت

نمونه برنامه های مربوط به آموزش ها را می توانید از لینک های زیر دانلود کنید
یک solution ایجاد کنید و محتویات برنامه ها را داخل آن paste کنید
http://www.avandweb.ir/pages/page.aspx?id=Asp

یوزر کنترل ها UserControl
مسترپیج masterpage
کنترل های سمت سرور SERVER SIDE CONTROLS
اعتبارسنجی
مدیریت ارورها ERROR HANDLING
شناسایی و مجوز دسترسی
اشتراک گذاری
SESSION VIEWSTATE
منو menu
ارسال ایمیل
آپلود و دانلود
یک cms ساده
 

redflight

عضو جدید
ایجادDownload در سایت

ایجادDownload در سایت

امکان ایجاد کردن دانلود در سایت با Asp.net

اول یه پوشه درست کنید و اسمش رو مثلا Download بزارید بعد فایل هایی که می خواهید از طریق سایت شما دانلود بشن رو زیپ کنید ( برای اینکه حجمش کم بشه) و در این پوشه بزارید. بعد :

1: یک کنترل HyperLink ایجاد کنید
2: خاصیت text آن را Download بزارید ( یا هر چیزی که می خواهید نمایش داده بشه)
3: NavigateUrl اون رو فایلی که انتخاب کنید که می خواهید از طریق این لینک دانلود بشه ( مسیرش می شه همون پوشه ای که ایجاد کردید


با اجرای برنامه وقتی روی پیوند Download کلیک کنید صفحه فایل دانلود میاد که سه گزینه save , open , cancel رو داره ...:w16:
 

redflight

عضو جدید
امکان ایجاد آپلود کردن فایل به سایت با Asp.net

امکان ایجاد آپلود کردن فایل به سایت با Asp.net

اول یک کنترل FileUpload ( در قسممت standard هست) اضافه می کنیم
خاصیت ID آن را Uploader می زاریم
دوم : یک کنترل Button اضافه می کنیم و خاصیت text آن را upload یا هر چیزی که می خوایم نمایش بده می زاریم
سوم: یک کنترل lable به فرم اضافه می کنیم ( این برای نمایش پیغام ها به کار می ره - مثلا می خواد بگه فایل درست آپلود شدیانه )

روی دکمه button دو بار کلیک می کنیم و برای دستورات رویدادش کد های زیر رو می نویسیم :
کد:
[LEFT]   

 String savePath="adresi ke mikhahim file haye upload shode zakhire
if(uploader.Hashfile)  

          {
        string fileName=Uploader.FileName;
        savePath+=fileName;
        Uploader.PostFile.SaveAs(savePath);
        lableh1.Text="فایل شما با موفقیت آپلود شد ";


        
 
}

else
[/LEFT]
 [LEFT]

lableh1.Text="خطا رخ داده  ";
[/LEFT]

 

redflight

عضو جدید
کد:
[LEFT]String savePath="adresi ke mikhahim file haye upload shode zakhire beshe "
[/LEFT]
اینجا مسیر ذخیره ی فایله که باید حتما از قبل یه پوشه توی مسیر پروژه ایجاد کرده باشیم
کد:
[LEFT]string fileName=Uploader.FileName; 
[/LEFT]
نام فایل را دریافت می کنه
کد:
[LEFT]savePath+=fileName; 
[/LEFT]
نام فایل را به مسیر الحاق می کنه
کد:
[LEFT]Uploader.PostFile.SaveAs(savePath); 
[/LEFT]
این خط می گه فایل با متد save as ذخیره بشه


کنترل lable هم بهتره مخفی کنید یا text آن را با space فضای خالی بزارید که قبل از آپلود فایل چیزی نشون نده
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
آموزش بررسی پسوندهای مجاز فایل ها در asp.net

آموزش بررسی پسوندهای مجاز فایل ها در asp.net

در بسیاری از موارد نیاز است که کاربر و یا مدیر سایت ، یک سری فایل بر روی سایت آپلود نماید ، حال این فایل می تواند یک تصویر ، یک سند متنی ، یک فایل فشرده و یا یک فایل ویدئویی باشد.

در این موارد برنامه نویس حتما می بایست پسوند فایل را بررسی نماید و اجازه آپلود هر نوع فایلی را ندهد.


در asp.net برای بررسی پسوند فایل ها چندین راه وجود دارد که در اینجا یکی از این راه ها را آموزش خواهیم داد :

به کد زیر توجه کنید :


PHP:
private bool IsFileValid() 
{
 string [] allowedImageTyps = {"image/gif", "image/jpeg"};
 
 StringCollection imageTypes = new StringCollection();
 
 imageTypes.AddRange(allowedImageTyps);
 
 if (imageTypes.Contains(FileUpload1.PostedFile.ContentType))
 {
  return true;
 }
 else
 {
 return false;
 }
}

در این کد ما یک آرایه ایجاد کرده ایم و تمامی انواع فایلی (MIME TYPES) مجاز را درون آن قرار داده ایم ، سپس تمامی آرایه را درون یک متغیر از نوع StringCollection ریخته ایم و در پایان با کمک تابع Contains به راحتی پسوند فایل را بررسی نموده ایم.

این راه حلی است که همکار بنده از اون استفاده می کنه.

یکی از مشکلات کد بالا این است که شما باید MIME TYPE ها را بلد باشید و همچنین نحوه عملکرد تابع Contains در حاله ای از ابهام است و باید حتما حسابی این تابع رو چک کنید و ببینید که در مقابل همه نوع فایلی درست عمل می کنه یا نه .


در ادامه راه حل دیگری که بنده خودم ازش توی کارام استفاده می کنم رو بهتون آموزش میدم:
به کد زیر توجه کنید:
PHP:
private static List<string> ValidPicExtensions
{
    get
    {
        List<string> ValidExtList = new List<string>();


        ValidExtList.Add(".jpg");


        return ValidExtList;


    }
}
        
        
public static bool IsValidPic(string fileName)
{


    try
    {


        string ext = Path.GetExtension(fileName).ToLower();


        foreach (string item in ValidPicExtensions)
        {
            if (ext == item)
            {
               return true;
            }
         }


         return false;


     }
     catch (Exception)
     {
                return false;
     }
}

بنده یک کلاس استاتیک ساخته ام و درون اون یک پراپرتی استاتیک ایجاد کرده ام.
درون متد get این پراپرتی ، یک لیست جنریک از نوع استرینگ (<List<string) تعریف کرده ام که درون آن با استفاده از تابع Add تک تک پسوند های مجاز را درونش اضافه می کنم.
دقت کنید که در اینجا ما صحبتی از MIME TYPE نزدیم و شما فقط با پسوند فایل ها سرو کار دارین.

مسلما هر انسانی که موس رو از کیبورد تشخیص بده ، پسوند فایل ها رو خیلی خوب می دونه و بنابراین روش من یک روش حرفه ای ولی ساده است.
حرفه ای بدین سبب که شما باید با مفاهیم کلاس نویسی ، توابع استاتیک ، کلاس های استاتیک و ... آشنا باشید و ساده بدین سبب که در اینجا ما فقط با پسوند فایل ها سرو کار داریم.


منبع :http://netnic.ir/post/category/67
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
آموزش جلوگیری از حمله xss در asp.net

آموزش جلوگیری از حمله xss در asp.net

معمولا هرجا از ادیتور استفاده می کنیم ، مجبوریم که validation request صفحه رو غیر فعال کنیم.

یکی از نکات خیلی مهم اینه که در اینجور صفحاتی که شما validation request صفحه رو غیر فعال کردین


همیشه یادتون باشه که ورودی هاتون رو بصورت htmlEncode بگیرین.


PHP:
String EncodedString = Server.HtmlEncode(textBox1.Text);
اینجوری علامت های خطرناکی مثل > یا < به عبارات بی خطری مثل > و < تبدیل میشن که خاصیت اجرا شدن ندارن وفقط خاصیت نمایش دارن.


پی نوشت :
در حمله XSS هکر کد جاوا اسکریپت خودشو توی تکست باکس میزیره و شما هم که از همه جا بی خبر ریال راحت اونو توی دیتابیس میریزین و توی صفحات سایتتون نشون میدین و اینجوری هکر عزیز خیلی راحت می تونه کوکی ها و اطلاعات مهم تک تک بازدید کنندگان سایت شما رو بدست بیاره.
asp.net بصورت پیش فرض محتوای تمامی تکست باکس ها رو چک می کنه و با دیدن عبارات خطرناک ، کلا اجازه postBack شدن صفحه رو نمیده ، ولی گاهی نیاز دارین که این خاصیت رو بصورتی که گفتیم غیر فعال کنیم.
البته در نسخه 4 asp.net بنده به ضخصه دیدم که حتی وقتی $ یا # توی تکست باکسی نوشته میشه ، صفحه ارور validate میده !
که این خودش داستانیه !
برای اینکه مثلا کاربرای سایتتون اینحوری نمی تونن پسوردای با ضریب امنیتی بالا با کمک کاراکترهای خاص برای خودشون انتخاب کنن ...

منبع: http://netnic.ir/post/category/67
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
آموزش ساخت تصاویر امنیتی کپچا حاوی متن اتفاقی (CAPTCHA) در asp.net | نسخه یک

آموزش ساخت تصاویر امنیتی کپچا حاوی متن اتفاقی (CAPTCHA) در asp.net | نسخه یک

در حوزه امنیت asp.net و در جهت بالا بردن امنیت سایت های طراحی شده با asp.net ، یکی از موثر ترین روش های جلوگیری از فعالیت روبات ها (برنامه هایی که بطور خودکار وارد سایت ها میشن و با سرعت بالا به ثبت نام ، ثبت نظر و ... می پردازند و موجب اخلال در سایت می شوند) استفاده از تصاویر امنیتی با نام Capcha (کپچا)می باشد.

ساخت تصویر capcha در asp.net نیاز به کلی کد نویسی سی شارپ داره ؛ برای ساخت capcha در asp.net ابتدا باید یک سری کاراکتر رندوم ایجاد کنین ، سپس اونها رو به عکس تبدیل کنین .
برای اینکه احتمال خوندن تصویر capcha توسط روبات ها رو به حداقل برسونیم ، بهتره که کاراکترهامونو بصورت رندوم بچرخونیم و در پایان هم چند تا خط با رنگ های رندوم روی تصویرمون ترسیم کنیم.


ابتدا فایل کتابخونه رو از آدرس زیر دانلود کنین

دانلود کتابخانه asp.net ساخت تصاویر کپچا (NetNicCapcha)
>> سرور پرشین گیگ

دانلود کتابخانه asp.net ساخت تصاویر کپچا (NetNicCapcha) >> سرور خودم

سپس اون رو unzip کنین و درون پوشه bin پروژتون قرار بدین.

سپس در صفحه ای که قراره تصویر امنیتی ایجاد کنین ، ابتدا کتابخونه رو به صفحه import کنین

PHP:
using Capcha_NetNic;
این کتابخونه امکانات زیر رو داره :



  • تولید تصویر حاوی عدد
  • تولیذ تصویر حاوی حروف کوچک
  • تولید تصویر حاوی حروف بزرگ
  • تولید تصویر حاوی عدد و حروف کوچک
  • تولید تصویر حاوی عدد و حروف بزرگ
  • تولید تصویر حاوی عدد و حروف بزرگ و حروف کوچک

که شما می تونین در بخش تظیمات کتابخونه مشخص کنین که کدوم نوع از تصاویر بالا رو می خواین.
حال برای راحتی کارمون ، توی code behind صفحه ای که قراره تصویر کپچا داشته باشه ، یک تابع می نویسم که هر وقت فراخونیش کنم ، یک تصویر جدید می سازه و بعد کد تصویر رو هم داخل یک سشن می ریزه :
PHP:
​private void NewCImage()
{
 string Cp = Capcha.MakePic(Server.MapPath(@"~\image\cp.gif"), 130, 40, 
System.Drawing.Color.AliceBlue, System.Drawing.Brushes.Black, 6, 
Capcha.OutPutType.NumericAlphabeticBiger);


 Imagec.ImageUrl = @"~/image/cp.gif";


 Session.Add("randomStr", Cp);
}
خوب همانطور که می بینید ابتدا یک متغیر از نوع string ساختم و بعد بوسیله کلاس capcha (این کلاس درون کتابخونه ای است که در بالا دانلود کردین و به پروژتون import کردین) و تابع MakePic یک تصویر ایجاد می کنم و بعد خروجی تابع که همون کتن داخل تصویر است رو می ریزم توی یک سشن و در پایان تصویرم رو میریزم توی تگ image داخل صفحه ام و تمامتابع MakePic یک سری ورودی از شما می گیره که به ترتیب زیر می باشند :

  1. ورودی اول مسیری است که تصویر کپچای تولید شده رو باید ذخیره کنه (حتما از server.mapPath استفاده کنین ، به @ هم دقت کنین که حتما بذارین)
  2. ورودی دوم عرض تصویر است که من 130 پیکسل قرار دادم. (بر حسب پیکسل است)
  3. ورودی سوم ارتفاع تصویر است که من 40 پیکسل قرار دادم. (بر حسب پیکسل است)
  4. ورودی چهارم رنگ نوشته داخل تصویر است
  5. ورودی پنجم رنگ پس زمینه تصویر است (باید رنگ استاندارد بهش بدین که با استفاده از کتابخونه system.drowing این کار امکان پذیر است)
  6. ورودی ششم تعداد کاراکترهای متن داخل تصویر است که من 6 کاراکتر در نظر گرفته ام (معمولا برنامه نویسان وب ، 4 یا 5 یا 6 کاراکتر در نظر می گیرن)
  7. ورودی آخر هم مشخص می کنه که کاراکترهای داخل تصویر باید شامل چه چیزایی باشه .... که شما 6 موردی که در بالا گفتم رو می تونین انتخاب کنین. کافیه که عبارت Capcha.OutputType رو تایپ کنین تا کل آپشن های قابل انتخاب براتون لیست بشه. (بعنوان مثال بنده عدد و حروف بزرگ رو در نظر گرفتم)

خوب کار تقریبا تمومه ....
حتما دیدین که توی سایت ها یک دکمه رفرش (refresh) قرار میدن که اگر عبارت داخل تصویر کپچا قابل خوندن نبود ، کابر با کلیک روی اون دکمه بتونه تصویر رو عوض کنه ...برای این کار یک عدد دکمه از هر نوعی که دوست دارید (imageButton یا linkButton یا ....) در صفحه قرار بدین و در رویداد کلیکش این کد رو اضافه کنین :
PHP:
NewCImage();
ملاحظه می کنین که من کار خاصی نکردم و فقط تابعی که در بالا ساختیم رو فراخونی کردم ....(خوبی تابع نویسی همینه دیگه .... از نوشتن کدهای تکراری جلوگیری می کنه و کدهاتون رو خوانا تر و تمیز تر می کنه)
خوب در رویداد لود صفحه هم این کد رو می نویسیم :

PHP:
[PHP]if (!IsPostBack)
{
 NewCImage();
}

کد نکته خاصی نداره و فقط یک if گذاشتم که فقط در زمانی که صفحه برای اولین بار داره لود میشه تابه من فراخونی بشه.
خوب ، در رویداد کلیک دکمه submit فرمتون هم این کد رو قرار بدید :
PHP:
if (Session["randomStr"].ToString().ToLower() == CapchaTBox.Text.ToLower())
{
 Response.Write("Successfull");
}
else
{
 Response.Write("Error");
 NewCImage();
}

دقت کنین که برای راحتی کار من ابتدا کل سشن رو بعد از اینکه تبدیل به string کردم ، بوسیله ToLower به حروف کوچیک تبدیل کردم تا کاربر لازم نباشه حروف رو حتما بزرگ تایپ کنه ....این دست شماست که بخواین کاربر رو محبور کنین که بزرگی و کوچکی حروف داخل تصویر رو هم رعایت کنه یا نه ....
به نظر من که لازم نیست .... و بهتره که خیلی به کاربر سخت نگیریم.
در ادامه در صورتی که شرط برقرا باشه ، یعنی کاربر عبارت داخل تصویر رو به درستی تایپ کرده و من یک کد نوشتم که توی صفحه یک سری عبارت رو نمایش بده که یه فیدبک از کارمون داشته باشیم ...در این بخش شما می تونین کد های ذخیره کردن اطلاعات فرم داخل دیتابیس یا هر کدی که دوست دارین رو قرا بدین ...

منبع :
http://netnic.ir/post/889
 
آخرین ویرایش:

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
آموزش کد کردن اطلاعات حساس در asp.net بوسیله الگوریتم MD5

آموزش کد کردن اطلاعات حساس در asp.net بوسیله الگوریتم MD5

یکی از دغدغه های برنامه نویسان وب ، حفاظت از اطلاعات حساس کابران می باشد.

حال این اطلاعات می تواند یوزرنیم ، پسورد و یا شماره حساب کاربران شما باشد .

یکی از الگوریتم های مفید در این زمینه ، الگوریتم MD5 می باشد.

در ادامه بوسیله این الگوریتم یک کلاس می سازیم که هر مقدار رشته ای با بوسیله MD5 کد کند و کد را به ما تحویل دهد:



ابتدا یک فایل کلاس با نام SampleClass.cs به پروژه اضافه می کنیم .
(دقت کنید که اسم فایل مهم نیست و هر اسمی می توانید برای آن انتخاب نمایید)

حال فضا نام های مورد نیاز را به صفحه اضافه می نماییم :

PHP:
using System.Text;

using System.Security.Cryptography;

حال کلاسمان را می سازیم :

PHP:
​public static class MD5{
 public static byte[] Encrypt(string InputString)
 {


  byte[] temp = new byte[16];


  UTF8Encoding encoder = new UTF8Encoding();


  MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();


  temp = md5Hasher.ComputeHash(encoder.GetBytes(InputString));


  return temp;
 }
}

کلاس قرار نیست دیتایی را ذخیره کند ، پس آن را استاتیک تعریف می نماییم.
درون کلاس استایتیک توابع می بایست استاتیک باشند ، پس تابع را نیز استاتیک تعریف می کنیم.

تابع یک مقدار string از ما می گیرد و آن را بوسیله الگوریتم MD5 به آرایه ای از بایت ها تبدیل می کند و سپس آرایه را بصورت خروجی تحویل می دهد.



حال یک صفحه به پروژه اضافه می کنیم و در رویداد لود آن :

PHP:
byte[] a =  MD5.Encrypt("NetNic.ir");


string temp = "";


for (int i = 0; i < a.Length; i++)
{
  temp += a[i].ToString();
}


Response.Write(temp);


بنده یک عبارت string را به تابعمان داده ام و خروجی را درون یک آرایه از نوع بایت ریخته ام.
سپس اطلاعات داخل آرابه را درون یک متغیر string ریخته ام و آن را درون صفحه نمایش داده ام.


نکته : دقت کنید که این فقط یک مثال ساده آموزشی برای یادگیری نحوه کدنویسی الگوریتم MD5 بود.

شما می توانید اطلاعات نام کاربری و رمز عبور کاربراتونو بوینوسیله کد کنین و سپس مقدار کدشده رو درون دیتابیستون ذخیره کنین .

در زمان لاگین هم ابتدا نام کاربری رو رمز عبور کاربر رو از داخل TextBox های داخل صفحه لاگین ، می خونین و سپس آنها را با MD5 کد (رمز) می کنین و سپس مقدار رمز شده رو با اطلاعات داخل دیتابیس مقایسه می کنین و ....

منبع:
http://netnic.ir/post/889
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
کتابخانه NetNicCapchaPro ایجاد تصاویر امنیتی کپچا حاوی متن اتفاقی (CAPTCHA)

کتابخانه NetNicCapchaPro ایجاد تصاویر امنیتی کپچا حاوی متن اتفاقی (CAPTCHA)

یکی از معضلات همه برنامه نویسان وب ، جلوگیری از حملات Brute Force است.

در این نوع حملات ، هکر یک برنامه رو روی سیستمش اجرا میکنه که این برنامه صفحات ثبت نام و صفحات لاگین سایت شما رو پیدا می کنه و شروع می کنه به پر کردن فرم ها و ارسال اطلاعات ....
این حمله به راحتی می تونه باعث بشه که سرور شما هنگ کنه و کلا سرور شما از دسترس خارج بشه ...
(به قول خودمون سرور میره رو هوا :) )

این حمله یکی از بدترین و خطرناک ترین نوع حملات است و وحشتناک ترین کابوس برنامه نویسان وب است .


برای جلوگیری از این حملات ، یک راه ساده وجود داره ....
کافیه که شما بتونین روبات (برنامه) رو از انسان تشخیص بدین...

برای تشخیص انسان از روبات میشه از چند روش استفاده کرد :


  1. قرار دادن پرسش امنیتی در صفحات ثبت نام و لاگین
  2. قرار دادن تصویر امنیتی در صفحات ثبت نام و لاگین

در روش اول ، شما یک سری سوال و جواب روی دیتابیستون قرار میدین و هر سری میاین یک سوال بصورت رندوم از دیتابیس می خونین و توی صفحتون نشون میدین و بعد جواب کاربر رو با جوابی که توی دیتابیس دارین مقایسه می کنین و ....

این روش یه مشکلی داره که بعد از یک مدت سوالات شما تکراری میشه و هکر به راحتی می تونه جوابا رو پیدا کنه ...

روش دوم روش خیلی حرفه ای تر و امن تری است ، در این روش هیچ اطلاعاتی از دیتابیس خونده نمیشه ، حتی هیچ عکسی هم بصورت فیزیکی روی سرور شما ذخیره نمیشه !


در آموزش قبلی
به شما کتابخونه NetNicCapcha که دست ساز خودم بود رو کامل معرفی کردم و نحوه کار باهاش رو کامل بهتون آموزش دادم ....

این کتابخونه بسیار عالی کار می کرد ، ولی تصویر رو بصورت فیزیکی روی سرور ذخیره می کرد .
این کار موجب میشه که پهنای باند سایت شما الکی مصرف بشه و الکی پروسس اضافی روی سرور انجام بشه ...

کتابخونه دست سازی که امروز می خوام بهتون معرفی کنم ، NetNicCapchaPro نام داره و همانطور که از اسمش مشخص است توسط سایت نت نیک (خودم) ساخته شده و نسخه پیشرفته تر کتابخونهNetNicCapcha (کتابخونه قبلی) است

امکانات جدید این کتابخونه نسبت به نسخه قبلی :

- در این کتابخونه تصویر بر روی رم ایجاد میشه و بعد به کاربر نمایش داده میشه و بعد از روی رم حذف میشه تا حتی کسی نتونه اطلاعات عکس رو از روی رم بخونه :)

- در این کتابخونه شما علاوه بر امکانات قبلی ، امکان تنظیم کردن فونت و سایز فونت و استایل فونت نوشته های داخل تصویر رو هم دارید

- در این کتابخونه شما می تونید با ترسیم خطوط در عکستون ، داخل تصویرتون یکم نویز اضافه کنین تا خوندنش توسط روبات ها غیر ممکن تر بشه ...
(روبات های پیشرفته امکان خواندن تصاویر امنیتی رو دارا می باشند)

- برای امنیت بیشتر شما می تونین یک لیست از رنگ های مورد نظرتون به کتابخونه بدین تا حتی رنگ خطوط نویر داخل تصویرتون هم بصورت رندوم از لیست شما انتخاب بشه

- تعداد خطوط بین 2 و 4 خط بصورت رندوم انتخاب میشه

- x و y خطوط هم بصورت رندوم انتخاب میشه


هر چیزی که میشد بصورت داینامیک و رندوم باشه رو من تو این کتابخونه در نظر گرفتم تا تصویر شما دارای حداکثر امنیت باشه :)



شروع کار با کتابخانه NetNicCapchaPro و ایجاد تصویر امنیتی کپچا (Capcha) :



ابتدا کتابخونه NetNicCapchaPro رو از اینجا دانلود کنین :



پس از دانلود ، کتابخانه رو unzip کنین و فایل کتابخونه رو درون پوشه Bin پروژتون اضافه کنین.
(می تونین روی پروژتون کلیک راست کنین و Add Refrence رو بزنین و بعد وارد تب Browse بشین و بعد فایل کتابخونه رو بهش بدین)

حال یک صفحه درون پروژتون اضافه کنین و یک اسم بهش بدین.

(مثلا : SecImage.aspx )



حال وارد CodeBehind این صفحه میشیم و کتابخونه رو به صفحه import می کنیم :

PHP:
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using NetNicCapchaPro;

(کتابخونه آخر که کتابخونه خودمه و کتابخونه های دیگه برای استفاده از کتابخونه من لازمه که به صفحه import بشن)

حال درون رویداد لود این صفحه کد های زیر رو بنویسین :

PHP:
Capcha c = new Capcha();


this.Response.Clear();


this.Response.ContentType = "image/jpeg";


List<Color> Colorlist = new List<Color>();


Colorlist.Add(Color.White);
Colorlist.Add(Color.Silver);
Colorlist.Add(Color.DarkBlue);
Colorlist.Add(Color.GreenYellow);
      


string OutChars = string.Empty;


OutChars = c.MakePic(120, 40, Color.Black, Brushes.Yellow, 6, 14, 
"Arial", FontStyle.Bold, Capcha.OutPutType.NumericAlphabeticLower, 
Colorlist);


c.Image.Save(this.Response.OutputStream, ImageFormat.Jpeg);


Session.Add("randomStr", OutChars);


c.Dispose();

خوب اول یک instance از کلاس Capcha می سازیم (این کلاس توی کتابخونه NetNicCapchaPro است)

سپس باید صفحمون رو بصورت jpeg تنظیم کنیم .


دقت کنین که من می خوام صفحه
SecImage.aspx رو بصورت یک عکس در بیارم !

پس هر جا شما این صفحه رو باز کنین ، این صفحه مثل یک عکس لود میشه :)

(این تکنیک به روز ترین تکنیک نمایش عکس امنیتی است که در اون شما عکستون رو توی یک صفحه می سازین بعد مشخص می کنین که اون صفحه یک عکس است! ،بدین صورت که اون صفحه یک تصویر رو بر می گردونه ...)

پس من ابتدا نوع خروجی این صفحه رو Clear کردم و بعد خروجی صفحه رو یک عکس از نوع Jpeg مشخص کرده ام.


(زیاد فکر این کد ها رو نکنین ، در ادامه کامل می فهمین که کارشون چیه)




- - - - - - - - - - - - - - - - - -


کلاس من یک تابع با نام MakePic داره که یه عالمه ورودی از شما می گیره و میره یک عکس می سازه و درون یک Property از نوع عکس با نام Image قرارش میده.



ورودی های این تابع به ترتیب بصورت زیر است :



  1. طول تصویر (پهنای تصویر)
  2. عرض تصویر (ارتفاع تصویر)
  3. رنگ بک گراند تصویر
  4. رنک متن تصویر (ForeColor)
  5. تعداد کاراکترهای تصویر (می خواین عبارت امنیتی داخل تصویرتون چند کاراکتری باشه )
  6. اندازه فونت
  7. اسم فونت
  8. استایل فونت (bold , italic یا ...)
  9. نوع عبارت امنیتی تصویرتون
  10. یک List از نوع جنریک Color از شما میگیره که رنگ خطوط نویز داخل تصویرتون بصورت رندوم از بین این رنگ ها انتخاب میشه

توضیح ورودی نهم :

در این قسمت یک enum از شما میگیره که می تونین بوسیله اون مشخص کنین که عبارت امنیتی داخل تصویرتون شامل کدوم یکی از اینا باشه :


  • فقط عدد
  • فقط حروف بزرگ
  • فقط حروف کوچک
  • عدد و حروف بزرگ
  • عدد و حروف کوچک
  • عدد و حروف برزرگ و حروف کوچک (بیشترین ضریب امنیت)

خوب می بینین که من نوع عدد و حروف کوچک رو انتخاب کردم

- - - - - - - - - - - - - - - - - -


تابع MakePic یک رشته تصادفی می سازه و بعد باهاش یک عکس می سازه و در آخر رشته رو بصورت خروجی برمیگردونه


من رشته خروجی تابع رو میگیرم و میریزم توی یک سشن


بعد عکس رو بصورت خروجی صفحه بر میگردونم


و در پایان کلاس رو Dispose می کنم تا خیالم راحت بشه که هیچ اطلاعاتی از عکسم روی رم سرور نمونده :)


و تمام


- - - - - - - - - - - - - - - - - -

حالا یک صفحه جدید توی پروژم اضافه می کنم و بعد یک فرم ثبت نام توش می سازم .

در بخش امنیتی فرمم یک تگ img و یک TextBox و یک ImageButton بدین صورت قرار میدم :


PHP:
 <img alt="" src="SecImage.aspx"/>         
<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/image/refresh.png" 
    onclick="ImageButton1_Click" />
<br/>


<asp:TextBox ID="CapchaTBox" runat="server"></asp:TextBox><br/>


<asp:Button ID="Button1" runat="server" Text="ورود" Height="23px" Width="105px" 
    onclick="Button1_Click" />
دقت کنین که من یک تگ img معمولی گذاشتم و
در خصوصیت src اون آدرس صفحه قبلیم رو گذاشتم.

نتیجه این میشه که با هر بار لود شدن صفحه ، یک تصویر امنیتی در این تگ نمایش داده خواهد شد.

بعدش یک ImageButoon قرار دادم که اگر تصویر امنیتی خوانا نبود ، کاربر بتونه روش کلیک کنه و یک تصویر امنیتی جدید توی صفحه لود بشه ...

تو رویداد کلیک این دکمه داریم :
PHP:
 Response.Redirect("~/Default.aspx");

می بینین که کار خاصی انجام ندادم و فقط Response به صفحه جاری کردم (Default.aspx اسم همین صفحه ای است که فرم ثبت نامم توشه)

در آخر یک Textbox گذاشتم که کاربر عبارت امنیتی که توی تصویر می بینه رو توش بنویسه ...


در پایان هم که دکمه ثبت اطلاعات فرم قرار داره که توی رویداد کلیکش :
PHP:
​if (Session["randomStr"].ToString().ToLower() == CapchaTBox.Text.ToLower()){
 Response.Write("Successfull");


 // you can do somthing .... 
 // for example : you can save form data to database ... 




}
else
{
 Response.Write("Error");
}


برای من بزرگی و کوچکی حروف مهم نیست .... (نمی خوام بخش امنیتی فرمم به بزرگی و کوچکی حروف حساس باشه ) پس کل متن تکست باکس رو کوچک می کنم و کل اطلاعات داخل سشنم رو هم کوچک می کنم و بعد با هم مقایسشون می کنم و اگر مساوی بودن ، یعنی کاربر کد رو درست وارد کرده و ....

منبع:
http://netnic.ir/post/891
 

Similar threads

بالا