PDA

View Full Version : Session , Refresh



ar_monti@
سه شنبه 13 آذر 1386, 13:54 عصر
با سلام
دوستان من در برنامه ام از دستوراتی برای Refresh کردن صفحه استفاده کردم . مشکلی که دارم اینست با استفاده از Session یک مقداری را در صفحه بعد میفرستم اما وقتی که صفحه جدید Refresh میشود آن مقدار null میشود در صورتی که مقدار قبلی که توسط Session به این صفحه منتقل دادم را لازم دارم . در واقع در اولین Refresh مقدار منتقل شده از صفحه قبل null میگردد.
لطفا کمکم کنید.
متشکرم

mr_mtc
سه شنبه 13 آذر 1386, 23:26 عصر
- توصیه میکنم تا زمانی که نیاز و اجبار نیست از session استفاده نکنید
- برای ارسال عادی از یک فرم به فرم دیگه میتونید از <(input (hidden> استفاده کنید

ar_monti@
چهارشنبه 14 آذر 1386, 07:46 صبح
آخه نمیشه. وقتی کاربرهای مختلفی درخواستهای مختلفی انجام میدهند اگر از Session استفاده نکنیم اطلاعات تداخل پیدا میکنند و همه چیز بهم میریزد.

shahab_ksh
چهارشنبه 14 آذر 1386, 09:40 صبح
رد Session رو از مرحله ساخت بگیرید ببینید چه سرنوشتی براش پیش میاد
شاید لازم باشه قبل از ساخت Session تست کنید که از قبل مقدار داره یا نه اگه مقدار نداشت بسازتش

abolfazl585
پنج شنبه 15 آذر 1386, 18:03 عصر
آخه نمیشه. وقتی کاربرهای مختلفی درخواستهای مختلفی انجام میدهند اگر از Session استفاده نکنیم اطلاعات تداخل پیدا میکنند و همه چیز بهم میریزد.

چرا نمیشه؟
مگه نمی خوای یک داده ای رو از یک صفحه به صفحه دیگه انتقال بدی؟
خوب، از QueryString استفاده کن. نترس هیچ بلایی سرش نمیاد. حتی اگه خودت بخوای هم نمی تونی بلایی سرش بیاری.هیچ تداخلی هم نداره.
ok?

Exception
پنج شنبه 15 آذر 1386, 19:54 عصر
باید ببینی از وقتی session ات ایجاد میشه تا وقتی null میشه چه بلایی سرش می اد ،چون postback شدن صفحه تاثیری روی مقدار session نداره چون session یک متغیر serverside هست.
استفاده از QueryString هم خوبه به شرطی که برات مهم نباشه که اطلاعاتی که به صفحه دیگه میفرستی کاربر ببینه و یا حتی تغییر بده!
ولی <(input (hidden> درمورد فرستادن اطلاعات از webform به webform دیگه کاربردی نداره.

abolfazl585
پنج شنبه 15 آذر 1386, 20:04 عصر
استفاده از QueryString هم خوبه به شرطی که برات مهم نباشه که اطلاعاتی که به صفحه دیگه میفرستی کاربر ببینه و یا حتی تغییر بده
اگه شما QueryString هاتون رو Encrypt نمی کنید، همون بهتر که استفاده نکنین

Exception
پنج شنبه 15 آذر 1386, 20:51 عصر
اگه شما QueryString هاتون رو Encrypt نمی کنید، همون بهتر که استفاده نکنین
دوست عزیز چه اصراریه که اطلاعات مهمی که قراراه کاربر نفهمه و دسترسی نداشته باشه بفرستی سمت client ؟؟؟!!!
که بعدش واسه اینکه مهرمانه بمونه اونارو یک دفعه encrypt کنی و یک دفعه decrypt!!!
و اطلاعات مهرمانت رو وابسته به کلید encryption ات بکنی ک اونم ممکنه لو بره!!!!!!
تا جایی که من دیدم و اطلاع دارم از queryString زمانی استفاده میکنند که مهرمانه بودن اطلاعات مهم نیست!(چطوره به آدرس صفحات درسایت برنامه نویس یه نگاهی بندازی! )

mahdi_negahi
جمعه 16 آذر 1386, 10:37 صبح
دوست عزیز از چه دستوری برای refresh استفاده میکی ؟
از

Response.redirect("صفحه") استفاده میکی ؟

اگر این کارو میکنی همین مشکلت است چون این دستور تمام متغییر ها رو میپرونه از دستور زیر استفاده کن :

Server.Transfer("صفحه"(

abolfazl585
جمعه 16 آذر 1386, 11:38 صبح
تا جایی که من دیدم و اطلاع دارم از queryString زمانی استفاده میکنند که مهرمانه بودن اطلاعات مهم نیست!(چطوره به آدرس صفحات درسایت برنامه نویس یه نگاهی بندازی! )
چه پیشنهاد جالبی ، حتما خودتون هم در این مورد تحقیق کنید.
دوست عزیز یک احساسی به من میگه که چون کار کردن با Session ها خیلی راحته، شما هم اون رو می پسندید ولی بهتره بهتون بگم که :
1 - Session ها سرور ساید هستند و مقداری از حافظه رم سرور رو به خودشون اختصاص میدن.
2 - TimeOut دارن و پس از مدتی حذف میشن.
3 - اگه تو کدهاتون بخوبی مدیریتشون نکنی با مشکل مواجه میشین.
4 - Session ها برای همه فرمها مشترک هستند ولی Query ها فقط برای یک فرم خاص.
و
.
.
.

Exception
جمعه 16 آذر 1386, 12:09 عصر
دوست عزیز یک احساسی به من میگه که چون کار کردن با Session ها خیلی راحته، شما هم اون رو می پسندید ولی بهتره بهتون بگم که :
3 - اگه تو کدهاتون بخوبی مدیریتشون نکنی با مشکل مواجه میشین.
.
.
کارکردن با session راحته ولی باید به خوبی مدیریت بشه تا با مشکل مواجه نشه!!!!
لطفا خیلی احساساتی نشید! چون حرفهاتون متناقضه!

someCoder
جمعه 16 آذر 1386, 18:06 عصر
با سلام
دوستان من در برنامه ام از دستوراتی برای Refresh کردن صفحه استفاده کردم . مشکلی که دارم اینست با استفاده از Session یک مقداری را در صفحه بعد میفرستم اما وقتی که صفحه جدید Refresh میشود آن مقدار null میشود در صورتی که مقدار قبلی که توسط Session به این صفحه منتقل دادم را لازم دارم . در واقع در اولین Refresh مقدار منتقل شده از صفحه قبل null میگردد.
لطفا کمکم کنید.
متشکرممیتونی سورس برنامه رو بذاری؟ همچنین اگر تو web.config تنظیمات Session رو عوض کردی، اون رو هم بذار.


وقتی کاربرهای مختلفی درخواستهای مختلفی انجام میدهند اگر از Session استفاده نکنیم اطلاعات تداخل پیدا میکنند و همه چیز بهم میریزد.نه الزاما. Session یکی از راههاست. تنها راه نیست.


استفاده از QueryString هم خوبه به شرطی که برات مهم نباشه که اطلاعاتی که به صفحه دیگه میفرستی کاربر ببینه و یا حتی تغییر بده!
ولی <(input (hidden> درمورد فرستادن اطلاعات از webform به webform دیگه کاربردی نداره.در مورد QueryString که دقیقا همینطوره.
اما در مورد فیلد Hidden، اگر با استفاده از Server.Transfer به صفحه دوم برید، میتونید مقدارش رو از Request.Form بگیرید. (البته من توصیه نمیکنم.)


اگه شما QueryString هاتون رو Encrypt نمی کنید، همون بهتر که استفاده نکنین
پس طبق نظر شما، vBulletin داره کار اشتباهی میکنه که از QueryString به صورت Encrypt نشده استفاده میکنه؟


دوست عزیز از چه دستوری برای refresh استفاده میکی ؟
از

Response.redirect("صفحه") استفاده میکی ؟

اگر این کارو میکنی همین مشکلت است چون این دستور تمام متغییر ها رو میپرونه از دستور زیر استفاده کن :

Server.Transfer("صفحه"(نه. با استفاده از Response.Redirect هم مقدار Session میمونه و استفاده از Server.Transfer یکمی بار اضافی روی سرور داره که فکر نمیکنم زیاد لازم باشه.


چه پیشنهاد جالبی ، حتما خودتون هم در این مورد تحقیق کنید.
دوست عزیز یک احساسی به من میگه که چون کار کردن با Session ها خیلی راحته، شما هم اون رو می پسندید ولی بهتره بهتون بگم که :
1 - Session ها سرور ساید هستند و مقداری از حافظه رم سرور رو به خودشون اختصاص میدن.
2 - TimeOut دارن و پس از مدتی حذف میشن.
3 - اگه تو کدهاتون بخوبی مدیریتشون نکنی با مشکل مواجه میشین.
4 - Session ها برای همه فرمها مشترک هستند ولی Query ها فقط برای یک فرم خاص.
و
.
.
.
منم احساس میکنم شما یکمی لحنتون از حالت علمی به حالت کل کل تبدیل شده!! به هر حال چندان مهم نیست.
در مورد استفاده از Session و QueryString هرکدوم مزایا و معایبی دارن که با توجه به کاربرد میشه تصمیم گرفت. به طور کلی، برای جمع بندی میتونم بگم:

اول مزایای Session:
از نظر امنیت که Session مطمینا خیلی امن تره. (چون اصلا چیزی به کاربر نمیرسه که بخواد عوضش کنه یا احیانا Decrypt کنه!)
از نظر پهنای باند هم QueryString چون همیشه اطلاعات رو به کاربر میفرسته و دوباره میگیره، پهنای باند بیشتری مصرف میکنه و در این مورد هم Session بهتره.
از نظر نوع اطلاعات قابل ذخیره هم، در QueryString اطلاعات فقط به صورت String هستند ولی در Session به صورت Object. پس عملا محدودیت خاصی در Sessionها نیست.
از نظر حجم اطلاعات قابل ذخیره هم QueryString محدودیت حدود 2 کیلوبایتی (http://support.microsoft.com/default.aspx?scid=kb;en-us;Q208427) داره و Session محدودیتی نداره.

حالا مزایای QueryString:
چون اطلاعات سمت کلاینت نگهداری میشه، پس اگر تعداد کاربرها خیلی خیلی زیاد باشه، میتونه سربار سرور رو کم کنه.
ضممنا صفحاتی که از QueryString استفاده میکنند، اطلاعاتشون موقع Bookmark کردن، حفظ میشه. (مثلا همین سایت برنامه نویس)
و در پایان مهمترین مزیتش اینه که محدود به Application خودتون نیست و میتونید از هر فرمی بهش اطلاعات بفرستید. مثلا شما میتونید از فرمهای خودتون، صفحه گوگل رو با پارمتر های خودتون فراخونی کنید: http://www.google.com/search?q=something (http://www.google.com/search?q=something)

اگر چیز دیگه ای هم جا انداختم بگید. الان اینها به فکرم میرسید.

PS: چقدر حرف زدم، خسته نباشم :لبخند:

abolfazl585
جمعه 16 آذر 1386, 19:06 عصر
اولا اینکه با اکثر نظرات جناب someCoder موافق هستم ولی مواردی را باید بگویم:

از نظر حجم اطلاعات قابل ذخیره هم QueryString محدودیت حدود 2 کیلوبایتی (http://support.microsoft.com/default.aspx?scid=kb;en-us;Q208427) داره
و Session محدودیتی نداره.
دوست عزیز با نظر شما موافقم و توصیه میکنم به سایت http://www.element-it.com/OnlineHelp/Webconfig.html حتما سری بزنید.
محدویت QueryString ها 2083 کاراکتر هست که فکر کنم برای اکثر کارها کافی باشه.


از نظر امنیت که Session مطمینا خیلی امن تره.
در امنیت Session شکی نیست ولی اگر بصورت حرفه ای مدیریت نشوند امنیتش بلای جان خواهد بود. فکر کنید کاربر از دکمه های Back ،ّForward، Stop و Refresh زیاد استفاده کنه و بعد آن به این نکته نیز فکر کنید که شما در کدهاتون از Session.Remove() استفاده کرده اید.
من خودم بارها و بارها از Session استفاده کرده ام و شکی هم در مفید بودن آن ندارم ولی هیچ وقت برای فرستادن یک متغیر(نه Object) از Session استفاده نمی کنم.


پس طبق نظر شما، vBulletin داره کار اشتباهی میکنه که از QueryString به صورت Encrypt نشده استفاده میکنه؟

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

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

someCoder
یک شنبه 18 آذر 1386, 23:06 عصر
اگه یادتون باشه، همون پسر 21 ساله ایرانی بود که چند ماه پیش Yahoo را با همان QueryString هاش هک کرده بود و درجه نا امنی همان حفره، بین 1000 تا 1100 بود یعنی خطرناکترین نوع حمله.(به گفته معتبرترین سایت های امنیتی دنیا)
چیزی نشنیدم در این مورد. لطفا منبع ذکر کنید.
فقط تنها برداشتی که از حرف شما کردم این بود که باز به حرف Exception میرسیم که گفت:

چه اصراریه که اطلاعات مهمی که قراراه کاربر نفهمه و دسترسی نداشته باشه بفرستی سمت client ؟؟؟!!!

abolfazl585
پنج شنبه 06 دی 1386, 18:50 عصر
چیزی نشنیدم در این مورد. لطفا منبع ذکر کنید.

راستشو بخوای منبعی ندارم ولی خاطرم هست که تو ویژه نامه Click میخوندم و نحوه هک کردنش اینجوری بود که :
یاهو برای redirect کردن تو بعضی مواقع ادرس مقصد رو تو QueryString میفرستاد.
حالا این نابغه ایرانی توی یه لینک برای دانلود، به جای همون Url، ادرس سایت خودش رو گذاشته بود و چون لینک دانلود شامل نام www.yahoo.com (http://www.yahoo.com) بود هر مرد و نامردی به اون لینک اعتماد میکرد و دکمه دانلود را فشار میداد و این یعنی فاجعه.


چه اصراریه که اطلاعات مهمی که قراراه کاربر نفهمه و دسترسی نداشته باشه بفرستی سمت client
اگه باز هم yahoo رو مثال بزنیم، در ساده ترین حالت اگه روی یه میل کلیک کنی، Id انکریپت شده اون میل رو تو QueryString میتونی ببینی.




بای بای

Sha2ow
پنج شنبه 06 دی 1386, 23:34 عصر
یاهو که همه کارش با cookie هست برا تستم شما تو mail خودتون login کنید تو Url بزنید
javascript:alert(document.cookie) البته همش Encrypt شده .....

این باگیم که شما می گید باگ Redirect
تا دلت بخواد هم yahoo داره هم google بیشترم برای fake page و phishing کردن مناسب هست اون جوان های 21 که این جور باگهارو پیدا کردن خیلی زیادن 2 تا شون از بچه ها تیم امنیتی اشیانه بودن ..... الیته اون قدیم مدیما حالا نمی دونم کجا هستند.

بحث کلا منحرف شد ....

anubis_ir
جمعه 07 دی 1386, 08:15 صبح
در asp.net برای مدیریت سشن‌ها از sql server هم می‌شود استفاده کرد. نیاز به کدنویسی خاصی نداره، چند جدول در sql server باید ایجاد شود و همچنین وب کانفیگ باید کمی تغییر کند.
http://support.microsoft.com/kb/317604