expire شدن سشن

foranyone

Well-Known Member
سلام چطوری میشه تنظیک کرد که سشن هر نیم ساعت یه بار expire شه؟
 

ziXet

مدیر انجمن PHP/MYSQL
سلام چطوری میشه تنظیک کرد که سشن هر نیم ساعت یه بار expire شه؟
اگه سشن تو دیتابیس ذخیره میشه که کار خیلی راحته!
ولی در غیر این صورت دوراه داری
1 - با set_ini طول عمر هر سشن رو تغییر بدی
2 - یک سشن جدید برای هر کاربر به نام lastaccess یا هر چیز دیگه ثبت کنی و موقع چک کردن این سشن رو بررسی کنی و اگه ok بود مقدار جدید تابع time رو بهش بدی(آپدیتش کنی)
---------------------------------------------------
پ.ن: اگه از db استفاده کنی بهتره

موفق باشید
 
اگه سشن تو دیتابیس ذخیره میشه که کار خیلی راحته!
سلام Shahkey عزیز .
من Session هام رو توو دیتابیس ذخیره می کنم .
اما مثلا اگه زمان Expire شدنش رو روو 10 دقیقه گذاشته باشم ، کاربر تا 10 دقیقه صفحه رو ریفرش نکنه Session ش پاک می شه و باید دوباره لاگین کنه .
اگه هم زمان Expire شدن رو زیادتر کنم ، آمار سایتم غلط در میاد (کاربران آنلاین و . . .) ، یعنی مثلا 10 دقیقه پیش کاربر از سایت بیرون رفته ، اما هنوز اون کاربر رو آنلاین نشون می ده .
ممنون می شم راهنمایی کنی .
دستت درد نکنه :rose:
 

ziXet

مدیر انجمن PHP/MYSQL
سلام Shahkey عزیز .
من Session هام رو توو دیتابیس ذخیره می کنم .
اما مثلا اگه زمان Expire شدنش رو روو 10 دقیقه گذاشته باشم ، کاربر تا 10 دقیقه صفحه رو ریفرش نکنه Session ش پاک می شه و باید دوباره لاگین کنه .
اگه هم زمان Expire شدن رو زیادتر کنم ، آمار سایتم غلط در میاد (کاربران آنلاین و . . .) ، یعنی مثلا 10 دقیقه پیش کاربر از سایت بیرون رفته ، اما هنوز اون کاربر رو آنلاین نشون می ده .
ممنون می شم راهنمایی کنی .
دستت درد نکنه :rose:
خب کوکی رو واسه همین گذاشتن دیگه!
شما علاوه بر سشن یک کوکی هم با یک کلید دیگه ثبت میکنی!
هر وقت کاربر از db پاک شد کوکی رو بررسی میکنی.
اگه کوکی معتبر بود دوباره سشن میسازی و...
اگه نبود میندازیش بیرون!
 
خب کوکی رو واسه همین گذاشتن دیگه!
شما علاوه بر سشن یک کوکی هم با یک کلید دیگه ثبت میکنی!
هر وقت کاربر از db پاک شد کوکی رو بررسی میکنی.
اگه کوکی معتبر بود دوباره سشن میسازی و...
اگه نبود میندازیش بیرون!
ممنون . اما درست متوجه نشدم . امکانش هست با یه مثال توضیح بدی ؟ شرمنده
توی کوکی چی باید بذارم ؟
چه زمانی معتبر یا نا معتبر هست کوکی ؟
یه دنیا ممنون
 

ziXet

مدیر انجمن PHP/MYSQL
ممنون . اما درست متوجه نشدم . امکانش هست با یه مثال توضیح بدی ؟ شرمنده
توی کوکی چی باید بذارم ؟
چه زمانی معتبر یا نا معتبر هست کوکی ؟
یه دنیا ممنون
توی کوکی میتونی حتی پسورد را هم بذاری ولی برای اینکه ایمنیش بالا بره باید یه راهی پیدا کنی بتونی از طریق کوکی کاربر رو بشناسی!
وقتی کاربر از تو سایت دکمه خروج رو زد اون کوکی رو هم پاک میکنی که دیگه با کوکی هم نتونه وارد بشه.
 

foranyone

Well-Known Member
منظورتون از اینکه sessioin تو دیتابیس ذخیره شه چیه ؟

یعنی مثلا :

کد:
session_start();
$_SESSION['user']='81.137.23.12';

الان چی رو داخل دیتابیس بزارم ؟
 

ziXet

مدیر انجمن PHP/MYSQL
منظورتون از اینکه sessioin تو دیتابیس ذخیره شه چیه ؟

یعنی مثلا :

کد:
session_start();
$_SESSION['user']='81.137.23.12';

الان چی رو داخل دیتابیس بزارم ؟
نه منظورم اینه که شما یه تیبل تو دیتابیس درست کن و اسمشو بذاز سشن!
بعد 3 تا فیلد id و session_string و time رو تو تیبل اضافه کن
با استفاده از این تیبل میتونی تمام کارهایی رو که با سشن php انجام میدادی انجام بدی با این تفاوت که سرعت و امنیت و انعظاف بیشتری داره
 

peyman1987

Member
نه منظورم اینه که شما یه تیبل تو دیتابیس درست کن و اسمشو بذاز سشن!
بعد 3 تا فیلد id و session_string و time رو تو تیبل اضافه کن
با استفاده از این تیبل میتونی تمام کارهایی رو که با سشن php انجام میدادی انجام بدی با این تفاوت که سرعت و امنیت و انعظاف بیشتری داره

البته فقط امنیت بیشتری سرعت و انعطاف پذیری بیشتر رو نمیشه گفت داره.


درباره نحوه مشخص کردن مدت زمان اکسپایر شدن سشن هم همونطور که دوستمون گفتن باید از PHP.ini استفاده کرد مثلا کد زیر میزان عمر سشن رو میزاره 5 ساعت. 18000 ثانیه در واقع:

PHP:
ini_set("session.gc_maxlifetime", "18000");
 

ziXet

مدیر انجمن PHP/MYSQL
البته فقط امنیت بیشتری سرعت و انعطاف پذیری بیشتر رو نمیشه گفت داره.


درباره نحوه مشخص کردن مدت زمان اکسپایر شدن سشن هم همونطور که دوستمون گفتن باید از PHP.ini استفاده کرد مثلا کد زیر میزان عمر سشن رو میزاره 5 ساعت. 18000 ثانیه در واقع:

PHP:
ini_set("session.gc_maxlifetime", "18000");
اتفاقا سرعت و انعظاف پذیری رو من تجربه کردم!
بحث های زیادی درباره سرعت کم session_start شده بخصوص وقتی که تعداد درخواست از سوی کاربر در یک لحظه زیاد میشه!
درباره انعظاف هم یکی از مزایاش میشه به کنترل زمانی کاربر و... اشاره کرد.

سیستم هایی مثل vbulletin به طور پیش فرض از دیتابیس برای session استفاده میکنن
 

foranyone

Well-Known Member
یعنی در حقیقت منظور شما اینه که کلا توایع سشن php رو بی خیال شیم و همون مفهموم رو با دیتابس پیاده سازی کنیم ؟

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

فقط یه ایراد داره که زیاد MYSQL رو اذیت میکنیم !
 

peyman1987

Member
اتفاقا سرعت و انعظاف پذیری رو من تجربه کردم!
بحث های زیادی درباره سرعت کم session_start شده بخصوص وقتی که تعداد درخواست از سوی کاربر در یک لحظه زیاد میشه!
درباره انعظاف هم یکی از مزایاش میشه به کنترل زمانی کاربر و... اشاره کرد.

سیستم هایی مثل vbulletin به طور پیش فرض از دیتابیس برای session استفاده میکنن

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

حتی اگر هم به این نتیجه برسیم که سرعت سشن با استفاده از سشن بیشتره مسلما نمیشه این رو نادیده گرفت که توی پروژه هایی که ممکنه لود DBMS فوق العاده زیاد باشه استفاده از این روش میتونه میزان دوام دیتابیس رو پایین بیاره و خطر Crash رو بالا.

درباره CMS ها هم خوب تفاوت وجود داره. اگر میگین سیستمی مثل VB از دیتابیس استفاده میکنه خوب میشه گفت بله سیستمی مثل CubeCart هم از دیتابیس استفاده میکنه ولی در مقابل Joomla و Drupal هم از سشن عادی استفاده میکنن. پس نمیشه این رو ملاک قرار داد برای استفاده از دیتابیس بجای سشن.

یعنی در حقیقت منظور شما اینه که کلا توایع سشن php رو بی خیال شیم و همون مفهموم رو با دیتابس پیاده سازی کنیم ؟

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

فقط یه ایراد داره که زیاد MYSQL رو اذیت میکنیم !

تقریبا همچین مفهومی پیدا میکنه. اما سشن PHP از نظر خطای هدر و BOM هیچ مشکلی نداره. یعنی این موضوع مشکلی نیست که بخوایم دلیلی برای استفاده از دیتابیس بجای سشن قرارش بدیم. با وجود تکنیکهای Output Buffering دیگه مشکل BOM معنی پیدا نمیکنه. براحتی میشه سیستمهای فوق العاده انعطاف پذیر و بدون مشکل ایجاد کرد.


:rose:
 

ziXet

مدیر انجمن PHP/MYSQL
ولی من این عقیده رو ندارم. هر چقدر هم که هدرهای سشن زمان ببرن مسلما کمتر از زمانی خواهد بود که هدرهای جانبی یک کوئری میتونن ببرن. کار زیاد مشکلی نیست میشه بر حسب میکروثانیه زمان هر کدوم رو مشخص کرد.

حتی اگر هم به این نتیجه برسیم که سرعت سشن با استفاده از سشن بیشتره مسلما نمیشه این رو نادیده گرفت که توی پروژه هایی که ممکنه لود DBMS فوق العاده زیاد باشه استفاده از این روش میتونه میزان دوام دیتابیس رو پایین بیاره و خطر Crash رو بالا.

درباره CMS ها هم خوب تفاوت وجود داره. اگر میگین سیستمی مثل VB از دیتابیس استفاده میکنه خوب میشه گفت بله سیستمی مثل CubeCart هم از دیتابیس استفاده میکنه ولی در مقابل Joomla و Drupal هم از سشن عادی استفاده میکنن. پس نمیشه این رو ملاک قرار داد برای استفاده از دیتابیس بجای سشن.



تقریبا همچین مفهومی پیدا میکنه. اما سشن PHP از نظر خطای هدر و BOM هیچ مشکلی نداره. یعنی این موضوع مشکلی نیست که بخوایم دلیلی برای استفاده از دیتابیس بجای سشن قرارش بدیم. با وجود تکنیکهای Output Buffering دیگه مشکل BOM معنی پیدا نمیکنه. براحتی میشه سیستمهای فوق العاده انعطاف پذیر و بدون مشکل ایجاد کرد.


:rose:
به نظر شما زمانی بیشتر از 30 ثانیه زمان کمیه؟ اگه از db استفاده بشه بازم 30 تانیه زمان میبره؟!
من گفتم، وقتی درخواست های متعدد در بازه زمانی کمی فرستاده میشه session_start خیلی طولانی میشه!!
اینم مدرک:http://www.google.com/#hl=en&source...+slow&aq=f&aqi=g-p2g8&oq=&fp=9733483af0cc9d26
البته دلیلش هم منظقیه چون سشن رو دیسک ذخیره میشه و بعضی ها هم گفتن که مسیر سشن رو به پوشه tmp تغییر دادیم درست شده!

موفق باشید
 
آخرین ویرایش:

peyman1987

Member
به نظر شما زمانی بیشتر از 30 ثانیه زمان کمیه؟ اگه از db استفاده بشه بازم 30 تانیه زمان میبره؟!
من گفتم، وقتی درخواست های متعدد در بازه زمانی کمی فرستاده میشه session_start خیلی طولانی میشه!!
اینم مدرک:http://www.google.com/#hl=en&source...+slow&aq=f&aqi=g-p2g8&oq=&fp=9733483af0cc9d26
البته دلیلش هم منظقیه چون سشن رو دیسک ذخیره میشه و بعضی ها هم گفتن که مسیر سشن رو به پوشه tmp تغییر دادیم درست شده!

موفق باشید

دوست عزیز نمیشه مشکلی رو که برای چند نفر ایجاد شده رو تعمیم داد به PHP . ممکنه نحوه برنامه نویسی بعضیها ایراد داشته باشه. بله اگر من طرز استفادم از حتی یه حلقه ساده هم اشتباه باشه ممکنه باعث timeout توی برنامه بشه ولی آیا میشه گفت حلقه PHP مشکل داره؟

من نمیگم سشن فایل PHP مشکلی نداره. عمده مشکلش هم بخاطر همون چیزیه که گفتین یعنی بخاطر اینکه توی فایل ذخیره میشه. و تمام این مشکلاتی که توی مواردی که جستجو کردین بوجود اومدن بخاطر اینه که موقعی که یه اسکریپت در حال اجراس فایل سشن رو لاک میکنه تا اسکریپت دیگه ای نتونه اونو ادیت کنه. البته این مشکل فقط میتونه به یه یوزر محدود بشه چون بقیه یوزرها فایلهای جدا دارن. ولی میشه با الگوریتمهای برنامه نویسی درست برای همیشه این مشکل رو دور نگه داشت. البته روش سومی هم بجز فایل و دیتابیس هست (memcache) که کمتر ازش یاد میشه در صورتیکه بین این سه روش بیشترین سرعت رو داره ولی کمترین کارآیی و انعطاف پذیری رو.

کلا بنظر من بهتره از یه روش خاص طرفداری نکنیم و فقط مزایا و ویژگیهای روشهای مختلف رو بگیم و تصمیم رو بزاریم به عهده خود برنامه نویسها.

موفق باشین :rose:
 

foranyone

Well-Known Member
من نمیگم سشن فایل PHP مشکلی نداره. عمده مشکلش هم بخاطر همون چیزیه که گفتین یعنی بخاطر اینکه توی فایل ذخیره میشه

خب دیتابیس هم بالاخره تو فایل ذخیره میشه !
تقریبا همچین مفهومی پیدا میکنه. اما سشن PHP از نظر خطای هدر و BOM هیچ مشکلی نداره. یعنی این موضوع مشکلی نیست که بخوایم دلیلی برای استفاده از دیتابیس بجای سشن قرارش بدیم. با وجود تکنیکهای Output Buffering دیگه مشکل BOM معنی پیدا نمیکنه. براحتی میشه سیستمهای فوق العاده انعطاف پذیر و بدون مشکل ایجاد کرد.

ولی همه ی کاربرا همون شروع کار با سشن مشکل دارن !

روش output bufferring رو میشه توضیح بدین ؟
 

k2-4u

Well-Known Member
تفاقا سرعت و انعظاف پذیری رو من تجربه کردم!
بحث های زیادی درباره سرعت کم session_start شده بخصوص وقتی که تعداد درخواست از سوی کاربر در یک لحظه زیاد میشه!
درباره انعظاف هم یکی از مزایاش میشه به کنترل زمانی کاربر و... اشاره کرد.

سیستم هایی مثل vbulletin به طور پیش فرض از دیتابیس برای session استفاده میکنن
موافقم . دلیل هم داره اونم اینه که .
session_start از سیستم فایلینگ استفاده می کنه (همون طور که می دونید تو فولدر tmp )
ولی روش دیتابیس . خب از دیتابیس استفاده می کنه
از نظر امنیت و سرعت عالیه !!
-------------------------------------
حتی اگر هم به این نتیجه برسیم که سرعت سشن با استفاده از سشن بیشتره مسلما نمیشه این رو نادیده گرفت که توی پروژه هایی که ممکنه لود DBMS فوق العاده زیاد باشه استفاده از این روش میتونه میزان دوام دیتابیس رو پایین بیاره و خطر Crash رو بالا.
خب DBMS لودش زیاده
ولی mysql اینطوری نیست
چون سیستمش به صورتی هست که هر جدول رو در یک فایل نگهر می داره
در ضمن مثل همیشه php با mysql رفیقه :wink:
-------------------------------------
با Output Buffer میشه
این کارو کرد . !!
منظورتون همون
http://ir.php.net/manual/en/ref.outcontrol.php
است ؟
میشه توضیح بدین ؟
 
آخرین ویرایش:

peyman1987

Member
خب دیتابیس هم بالاخره تو فایل ذخیره میشه !


ولی همه ی کاربرا همون شروع کار با سشن مشکل دارن !

روش output bufferring رو میشه توضیح بدین ؟

درسته هر چیزی که قراره بعدا استفاده بشه روی دیسک ذخیره میشه ولی خوب DBMS برای نگهداری اطلاعات سنگین طراحی و ساخته شده ولی سشن فقط برای اینکه یه سری متغیر رو نگهداری کنه استفاده میشه پس نمیشه سیستمش رو با DBMS مقایسه کرد. البته خوب دیتابیس هم از همین سیستم لاک استفاده میکنه یعنی حتی اگر شما با دیتابیس هم سشن درست کنین و سیستم لاک درست براش در نظر نگیرین دچار مشکل میشین. در واقع وقتی دارین از سشن هندلر دیگه ای هم استفاده میکنین باید هنگام استفاده از هر کدوم از رکوردها لاکش کنین تا دچار مشکل نشین. خود mysql این کار رو براتون انجام میده ولی داشتن اطلاعات درباره ش بد نیست.

بافرینگ رو هم آخر همین پست توضیح میدم.

منظورتونو درباره جمله دوم که همه کاربرا همون شروع کار با سشن مشکل دارن رو متوجه نشدم.

موافقم . دلیل هم داره اونم اینه که .
session_start از سیستم فایلینگ استفاده می کنه (همون طور که می دونید تو فولدر tmp )
ولی روش دیتابیس . خب از دیتابیس استفاده می کنه
از نظر امنیت و سرعت عالیه !!
-------------------------------------

خب DBMS لودش زیاده
ولی mysql اینطوری نیست
چون سیستمش به صورتی هست که هر جدول رو در یک فایل نگهر می داره
در ضمن مثل همیشه php با mysql رفیقه :wink:
-------------------------------------
با Output Buffer میشه
این کارو کرد . !!
منظورتون همون
http://ir.php.net/manual/en/ref.outcontrol.php
است ؟
میشه توضیح بدین ؟

منظورتونو درباره اینکه DBMS لودش زیاده ولی MySQL اینطوری نیست رو متوجه نشدم. اگر میشه بیشتر توضیح بدین.

درباره اینکه MySQL هر ردیف رو داخل یک فایل نگه میداره من اطلاعی ندارم ولی توی روش هندلینگ با فایل هم متغیرهای هر سشن توی یه فایل جدا هستن. در واقع هر رکورد جدول سشن دیتابیس با هر فایل سشن هندلینگ عادی یکسانه.

نمیدونم چرا تعجب کردین وقتی گفتم با بافرینگ میشه این مشکل رو حل کرد. دقیقا با همین توابعی که لیستشونو لطف کردین و گذاشتین میشه مشکل BOM سشن رو حل کرد. خوب بافرینگ صرفا برای این کار ساخته نشده ولی یکی از استفاده هاش که بیشتر معموله برای همین موضوعه. سیستم کاریش هم ساده س. بطور کلی ما با استفاده از بافرینگ میایم و تمام خروجی های کدمون (مثلا متنها که شامل تگهای HTML هم میشن) رو سمت سرور نگه میداریم و نمیفرستیم سمت کلاینت تا زمانی که اجرای کد تموم بشه و بعد تمام خروجی رو یک جا میفرستیم برای کلاینت. این باعث میشه که شما هر قسمتی از کد بتونین هدر HTTP که خوب سشن و کوکی دو موردی هستن که از هدرها استفاده میکنن رو بفرستین بدون اینکه پیغام Headers already sent رو بگیرین.

یه تستی رو من خودم انجام دادم برای مقایسه دیتابیس با سشن توی حالت عادی. شاید به نظرتون خنده دار باشه ولی برای خودم جالب بود که بفهمم سرعت اجرای سشن استارت و یه کوئری ساده دیتابیس چقدر فرق داره.

کدی که باهاش تست کردم اینه:
PHP:
<?php
    $session_start = microtime();
    session_start();
    $session_end = microtime();

    mysql_connect('localhost','root');
    mysql_select_db('shorepromotions');
    
    $db_start = microtime();
    $db_result = mysql_query("select * from `colors` where `title`='black'");
    $db_end = microtime();
    
    mysql_close();
    
    print($query);
    print("$session_start - $session_end =>".($session_end - $session_start).'<br/>');
    print("$db_start - $db_end =>".($db_end - $db_start));
?>

این کد رو من به دو صورت اجرا کردم. هر روش رو هم پنج بار تکرار کردم و از خروجی میانگین گرفتم تا یه مقدار دقتش بیشتر باشه.

روش اول خوب پنج بار با فاصله پنج ثانیه صفحه رو ریفرش کردم و نتیجه:

کد:
0.75000400 1251546743 - 0.75039100 1251546743 =>0.000387
0.75368200 1251546743 - 0.75412100 1251546743 =>0.000439

0.95312900 1251546752 - 0.95352200 1251546752 =>0.000393
0.95681300 1251546752 - 0.95725200 1251546752 =>0.000439

0.32812800 1251546761 - 0.32851000 1251546761 =>0.000382
0.33223400 1251546761 - 0.33270100 1251546761 =>0.000467

0.45312900 1251546771 - 0.45353700 1251546771 =>0.000408
0.45665700 1251546771 - 0.45725800 1251546771 =>0.000601

0.03125400 1251546780 - 0.03165500 1251546780 =>0.000401
0.03484500 1251546780 - 0.03527700 1251546780 =>0.000432

و روش دوم توی هر بار ریفرش دستم رو 2 ثانیه روی F5 نگه داشتم تا یه سری ریکوئست پشت سر هم فرستاده بشه و نتیجه شد:

کد:
0.18750300 1251546934 - 0.19204800 1251546934 =>0.004545
0.19850700 1251546934 - 0.19908500 1251546934 =>0.000578

0.39062900 1251546949 - 0.39726400 1251546949 =>0.006635
0.40085300 1251546949 - 0.40147000 1251546949 =>0.000617

0.37500300 1251546959 - 0.38170300 1251546959 =>0.0067
0.38628300 1251546959 - 0.38712800 1251546959 =>0.000845

0.42187800 1251546968 - 0.43050000 1251546968 =>0.008622
0.43625300 1251546968 - 0.43669100 1251546968 =>0.000438

0.46875300 1251546976 - 0.47569300 1251546976 =>0.00694
0.47948800 1251546976 - 0.48005900 1251546976 =>0.000571

میانگین روش اول شد:

کد:
Session =>     0.0003942
Database =>    0.0004756

و روش دوم:

کد:
Session =>  0.0066884
Database =>    0.0006098

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

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


  1. این تست لوکال بود و سرعت ارسال و دریافت هدرها زیاد بودن برای همین هم درصد تداخل ریکوئستهای سشن بیشتر بود. اگر تست آنلاین بود خوب مسلما زمان سرباری که صرف ارسال و دریافت هدرها میشد میتونست یه زمان اضافه به هندلر فایل بده که کارش رو با فایل تموم کنه تا زمانیکه هدر بعدی میاد.
  2. اینجا فقط یه کوئری ساده فرستاده شده و کار خاص دیگه ای انجام نشده. ممکنه تعداد کوئریها بیشتر باشن یا کارهای دیگه ای هم با نتیجه کوئری انجام بشه که خوب مسلما زمان بیشتری میبره.
  3. تعداد رکوردهای داخل جدولی که من ازش کوئری زدم 20 تا بیشتر نبود. توی تعداد رکوردهای بالاتر خوب سرعت کمتر میشه.
بهرحال بازم میگم هر روشی مزایا و معایب خودش رو داره. سشن هندلینگ PHP بنظر من باگ نداره فقط تحت شرایط مختلف بصورت طبیعی واکنشهای مختلفی نشون میده. این برنامه نویسه که انتخاب میکنه کدوم روش براش بهتره.
 

k2-4u

Well-Known Member
درسته هر چیزی که قراره بعدا استفاده بشه روی دیسک ذخیره میشه ولی خوب DBMS برای نگهداری اطلاعات سنگین طراحی و ساخته شده
همیشه کاربردش فقط این نیست
مشکل . تداخل اطلاعات . افزونگی
یا بحث "Frieze" کردن اطاعات
(زمانی که 2 یا چند نفر به صورت همزمان . می خوان یک مقدار رو تغییر بدن )
هم هست
که مارو به استفاده از DBMS مجبور می کنه

ولی سشن فقط برای اینکه یه سری متغیر رو نگهداری کنه استفاده میشه پس نمیشه سیستمش رو با DBMS مقایسه کرد. البته خوب دیتابیس هم از همین سیستم لاک استفاده میکنه یعنی حتی اگر شما با دیتابیس هم سشن درست کنین و سیستم لاک درست براش در نظر نگیرین دچار مشکل میشین. در واقع وقتی دارین از سشن هندلر دیگه ای هم استفاده میکنین باید هنگام استفاده از هر کدوم از رکوردها لاکش کنین تا دچار مشکل نشین. خود mysql این کار رو براتون انجام میده ولی داشتن اطلاعات درباره ش بد نیست.
خب همون طور که گفتید mysql کار لاک کردن رو خودش انجام میده . در سیستم فایلینگ (سیستم session_start) . هم حتما .عملیات لاکی که گفتین انجام
میشه . و برای جلوگیری از تداخل است
پس هر 2 از این نظر برار هستند

منظورتونو درباره اینکه DBMS لودش زیاده ولی MySQL اینطوری نیست رو متوجه نشدم. اگر میشه بیشتر توضیح بدین.
ببخشید من MSDB رو با DBMS اشتباه گرفتم (Microsoft Data Base , Data Base Manage System)

درباره اینکه MySQL هر ردیف رو داخل یک فایل نگه میداره من اطلاعی ندارم ولی توی روش هندلینگ با فایل هم متغیرهای هر سشن توی یه فایل جدا هستن. در واقع هر رکورد جدول سشن دیتابیس با هر فایل سشن هندلینگ عادی یکسانه.
بله mysql هر جدول رو بر روی یک فایل زخیره می کنه .
برای همین . برای در خواست از یک table در mysql
فقط یک فایل باز میشه

برای Benchmark های هم
که گذاشتین بسیار ممنون
خیلی جالب بودند
 

foranyone

Well-Known Member
لبته خوب دیتابیس هم از همین سیستم لاک استفاده میکنه یعنی حتی اگر شما با دیتابیس هم سشن درست کنین و سیستم لاک درست براش در نظر نگیرین دچار مشکل میشین. در واقع وقتی دارین از سشن هندلر دیگه ای هم استفاده میکنین باید هنگام استفاده از هر کدوم از رکوردها لاکش کنین تا دچار مشکل نشین. خود mysql این کار رو براتون انجام میده ولی داشتن اطلاعات درباره ش بد نیست.
این قسمت رو نتونستم هضم کنم:-?
منظورتونو درباره جمله دوم که همه کاربرا همون شروع کار با سشن مشکل دارن رو متوجه نشدم.
منظورم اینه که هر کاربری که شروع میکنه PHP یاد بگیره ، موقع استفاده از Session برای اولین بار ، 100% مشکل هدر قبلا ارسال

شده رو تجربه میکنه !:green:

در مورد بافرینگ باید اینجوری عمل شه ؟

خط اول برنامه و قبل از sessin_start باید بنویسیم ob_start()

و خط آخر بنویسیم ob_end() درسته ؟

پیمان جان مرسی خیلی جالب بود دستت در نکنه کاش رو سرور هم تست کنی :wink:
 

k2-4u

Well-Known Member
این قسمت رو نتونستم هضم کنم
وقتی تو یک شبکه
یک یا چند نفر به صورت هم زمان . تصمیم میگیرن یک
فایل رو ویرایش بکنن چه اتفاقی می افته ؟ . ==> فایل خراب میشه و اطلاعات از بین میره :sad: :cry:
برای جلوگیری از این مشکل . اولین کاربری که دستش به فایل میرسه . کل سیستم فایلینگ
به قول دوستمون لاک میشه . (برای کاربر های دیگه) تا کاربر مورد نظر کارش تموم بشه
سپس نفر بعد که البته بهش میگن "Frieze" کردن

در مورد بافرینگ باید اینجوری عمل شه ؟

خط اول برنامه و قبل از
هر محدوده ای که احساس می کنی چیزی به سمت
مرورگر ممکنه ارسال شه . حالا ممکنه cookie session header
یا html باشه .
اول و آخرش قرار میدی
 

جدیدترین ارسال ها

بالا