PDA

View Full Version : سوال: ای دی Session



tdkhakpur
پنج شنبه 20 مرداد 1390, 05:04 صبح
یک سوال تخصصی در مورد ساخت آدی سشن در داخل سرور وب دارم و اون اینه که وقتی یک سرور برای یک وب سایت که بازدید میشه یک شناسه بصورت id ایجاد میکنه
حالا سوال اینه که این آی دی سشن برای هر بازدید کننده بصورت جدا ساخته میشه یا برای هر بازدید کننده ای که از دو کامپیوتر یا به قولی از دو آی پی جدا استفاده میکنه بصورت جدا ساخته میشه؟
یعنی اگه دو کاربر از یک کامپیوتر وارد سایت بشه id سشن متفاوت دارن؟
اگر ای دی سشن مشابه باشه و هر دو کاربر سایت از متغییر با نام مشابه استفاده کنند وضع فایل session چی میشه؟ متغییرها جدا هستن یا اینکه روی هم نوشته میشن.
ممنون

eshpilen
پنج شنبه 20 مرداد 1390, 08:42 صبح
حالا سوال اینه که این آی دی سشن برای هر بازدید کننده بصورت جدا ساخته میشه یا برای هر بازدید کننده ای که از دو کامپیوتر یا به قولی از دو آی پی جدا استفاده میکنه بصورت جدا ساخته میشه؟این شناسه به ازای هر مرورگر هست. گرچه روی یک رایانه باشن و یک IP داشته باشن.

یعنی اگه دو کاربر از یک کامپیوتر وارد سایت بشه id سشن متفاوت دارن؟در حالت پیشفرض خیر. یعنی بنابراین اگر از سشن برای لاگین استفاده شده باشه، در هر زمان فقط یک کاربر میتونه لاگین باشه.
البته بیشتر سیستمهای دیگه هم همینطور هستن. فرضا آیا شما میتونید در این سایت همزمان با دو آیدی لاگین باشید؟!
حتی اگر بدون لاگ آوت، با آیدی دیگری لاگین کنید، سشن و لاگین کاربر قبلی پاک میشه و با سشن جدید جایگزین میشه (البته اگر از سشن استفاده بشه؛ وگرنه بصورت کوکی هست که اونم به همین شکل Overwrite میشه).
ولی اگر از مرورگر دیگری استفاده کنید میتونید در هرکدام با یک آیدی متفاوت لاگین باشید.
البته اگر بخوایم هویت چند نفر رو توسط سشن یا کوکی در یک مرورگر هم ذخیره کنیم شدنی هست، ولی فکر کنید میبینید که چندان معنا و کاربردی نداره و از نظر امنیتی هم به مشکل میخوریم.

اگر ای دی سشن مشابه باشه و هر دو کاربر سایت از متغییر با نام مشابه استفاده کنند وضع فایل session چی میشه؟ متغییرها جدا هستن یا اینکه روی هم نوشته میشن.آیدی سشن در چه شرایطی مشابه باشه؟ همچین چیزی نمیشه. چون تاجاییکه میدونم تولید آیدی سشن بر اساس یکسری اطلاعات خاص مرورگر کاربر و نیز پارامترهای رندوم صورت میگیره و احتمال یکی شدن دو آیدی سشن غیرممکن یا حداقل بسیار بسیار کم هست.

tdkhakpur
پنج شنبه 20 مرداد 1390, 13:09 عصر
ولی اگر از مرورگر دیگری استفاده کنید میتونید در هرکدام با یک آیدی متفاوت لاگین باشید.

حالا به چه کدی میشه این کار رو انجام داد که برای هر مرورگر یک ایدی سشن متفاوت بده؟ برای من که اینجا نمیده!


چون تاجاییکه میدونم تولید آیدی سشن بر اساس یکسری اطلاعات خاص مرورگر کاربر و نیز پارامترهای رندوم صورت میگیره

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

eshpilen
جمعه 21 مرداد 1390, 10:31 صبح
با توجه به این مطالب اگه از یه کامپیوتر وارد دو سایت متفاوت بشیم اونوقت آی دی سشن متفاوت میشه. خیر. هر سایت دامین متفاوتی داره و بنابراین کوکی های مجزا خواهند داشت. یعنی آیدی سشن هم برای هر سایت متفاوت است. کوکی یک دامین فقط برای دامین خودش توسط مرورگر به سرور ارسال میشه، نه برای سایت های دیگه.
بنابراین، در مرورگر میتواند هر تعدادی کوکی سشن مربوط به سایتهای مختلف بطور همزمان موجود باشد. وقتی مرورگر با هر دامینی تماس میگیرد، کوکی سشن متعلق به همان دامین را به سایت مورد نظر ارسال میکند و در نتیجه سشن مربوط به همان سایت توسط آن سایت شناسایی و فعال میشود.

tdkhakpur
جمعه 21 مرداد 1390, 13:24 عصر
وقتی مرورگر با هر دامینی تماس میگیرد، کوکی سشن متعلق به همان دامین را به سایت مورد نظر ارسال میکند و در نتیجه سشن مربوط به همان سایت توسط آن سایت شناسایی و فعال میشود.

منظور اینه که اگه دو سایت مربوط به همون دامین باشه اونوقت چی میشه؟
بگیریم دو تا سایت داریم که به یک سرور وصل هستن اون سرور از کجا تشخیص میده که این دو وب متفاوته یا اینکه مرورگر تقاضای متفاوت داده تا از این طریق بتونه بهشون سشن متفاوت بده؟
ممنون

eshpilen
جمعه 21 مرداد 1390, 15:12 عصر
سیستم سشن PHP پارامترهایی داره که قابل تنظیم هستن. بوسیلهء اون پارامترها باید سشن هر سایت رو از سشن دیگری متمایز کنید.
یکی از این پارامترها نام سشن هست که بطور مثال توسط تابع session_name میتونید برای سشن هر قسمت یا سایت اسم متفاوتی بذارید. اونوقت باید این تابع رو هربار قبل از استارت سشن، فراخوانی کنید (با نام سشن مورد نظر بعنوان آرگومان).
سرور این کار رو بصورت خودکار انجام نمیده، این برنامه و سایتهای شما هستن که باید این کار رو بکنن.

tdkhakpur
یک شنبه 23 مرداد 1390, 18:25 عصر
اونوقت باید این تابع رو هربار قبل از استارت سشن، فراخوانی کنید (با نام سشن مورد نظر بعنوان آرگومان).
سرور این کار رو بصورت خودکار انجام نمیده، این برنامه و سایتهای شما هستن که باید این کار رو بکننخب به چه شکلی این کار رو میشه انجامش داد؟یعنی میشه کاری کرد اسم فایل سشن رو خودمان بدیم تا از خودش عدد تصادفی ایجاد نشه.
ممنون

eshpilen
یک شنبه 23 مرداد 1390, 20:30 عصر
خب به چه شکلی این کار رو میشه انجامش داد؟یعنی میشه کاری کرد اسم فایل سشن رو خودمان بدیم تا از خودش عدد تصادفی ایجاد نشه.
اون چیزی که تصادفی تولید میشه به شما ارتباطی نداره و بهرصورت تولید میشه. مربوط به کارکرد داخلی سیستم سشن میشه. شما به اون کاری نداشته باش چون مشکلی نداره.
شما فقط کافیه اینطوری عمل کنی، مثلا اگر دوتا سایت روی یک دامین دارید:
در سایت اول قبل از هر بار که میخواید سشن رو بوسیلهء session_start() استارت کنید این تابع رو به این صورت اجرا کنید:

session_name('site1');
در سایت دوم هم به این شکل:

session_name('site2');
به همین سادگی.
این فرمانها باعث میشن اسم کوکی سشن برای هر سایت متفاوت باشه و بنابراین سشن هاشون با هم تداخل نکنن و بتونید همزمان هر دو سشن رو حفظ کنید.

tdkhakpur
دوشنبه 24 مرداد 1390, 02:17 صبح
ممنون......