PDA

View Full Version : MySQL و SESSION



sedamorde
شنبه 23 آبان 1388, 20:52 عصر
سلام,
من همیشه با این session مشکل داشتم!!!
من از phpclass یک کلاس دانلود کردم که session را در sql درست میکنه. حالا چندتا سوال برام پیش اومده که از شما میپرسم و اگر تونستید کمک کنید ممنون میشم.
1- من برای آغاز session از این دستورات استفاده کردم :


ini_set("session.cookie_domain",".mysite.com");
ini_set("session_cache_limiter","private");
ini_set("session.cookie_lifetime","10800");
session_name('mysite');
session_start();
این تنظیمات مشکلی به وجود نمیاره؟ آیا از لحاظ امنیتی session.cookie_lifetime مشکلی نداره!؟ جون به فرظ کاربر اگر مرورگر را ببنده و 2 ساعت دیگه باز بیاد همون session براش ایجاد میشه!

2- من در برنامم از دو تا mysql استفاده کردم. session ها یک جا و دیگر مطالب جای دیگر. حالا به فرض در صفحه ورود که باید هویت کاربر مشخص بشه من باید هر زمان که با بانک session کار داشتم اول اون را باز کنم (mysql_connect را در یک تابع نوشتم) بعد اون را ببندم و بانک 2 را باز کنم:


function mysql()
{
@$conn=mysql_connect('localhost','user','pass') or @die('error');
$select=mysql_select_db('database',$conn);
}

function mysql_session()
{
@$conn2=mysql_connect('localhost','user','pass') or @die('error');
$select2=mysql_select_db('session_database',$conn2 );
}


//user
$conn=mysql();
$check=mysql_query("SELECT * FROM $table WHERE username='$username' LIMIT 1");
mysql_close();
unset($conn);

//session
$conn=mysql_session();
$_SESSION['test']='tser';
mysql_close();
جالب زمانی که زمان را حساب میکنم نسبت به یک session معمولی این کد زمانی حدود 2 برار بیشتر مصرف میکنه تا به انتها برسه!
حالا شما پشنهادی, نقدی و ... دارید؟

3- اگر کسی میتونه راجع به :


ini_set("session.use_only_cookies", "1");
به من توضیح بده, آیا به کار بردنش با در نظر گرفتن کدهای بالا مناسب هست؟
مرسی :)

sedamorde
یک شنبه 24 آبان 1388, 17:11 عصر
کسی اینجا نیست!؟؟

sedamorde
سه شنبه 26 آبان 1388, 18:36 عصر
یعنی کسی کمک نمیکنه!؟؟ :(
بلد نیستید با دوست ندارید کمک کنید؟؟ :D

sedamorde
یک شنبه 01 آذر 1388, 20:49 عصر
به خدا من پروژم مونده تا بکی بهم راهنمایی کنه!! یعنی تا حالا هیچکس از چندتا db استفاده نکرده همزمان!؟ :|

mahmood3d
دوشنبه 02 آذر 1388, 10:24 صبح
سلام
من خودم تازه وارد پی اچ پی شدم و سشن ها رو هم تازه شروع کردم دارم باهاشون کار می کنم و در مورد سؤال شما نمی تونم نظر بدم ولی به نظر من اگه دو تا دیتا بیستون رو یکی کنید هم کارتون راحت تر میشه و هم تمرکز روی کدهاتون بیشتر میشه. در نتیجه امنیت هم بالاتر میره چون کنترل یک دیتا بیس بهتر از کنترل دوتاست.
البته این نظر شخصی منه باز هم اگه اساتید محترم نظری دارن لطفا نظر بدن تا استفاده کنیم

sedamorde
دوشنبه 02 آذر 1388, 20:22 عصر
مرسی از نظرت دوست من :)
14.000 کاربر, 5000 مقاله و 1000 کتاب آنلاین و .... تو یک دیتابیس به نظرم جالب نیست.
یعنی اگر 2000 نفر با هم آنلاین بشن فکر نمیکنم وضع جالبی برای db باشه! بخصوص که session این 2000 نفر قرار در db باشه!

narsic
جمعه 20 آذر 1388, 18:21 عصر
یعنی کسی کمک نمیکنه!؟؟ :(
بلد نیستید با دوست ندارید کمک کنید؟؟ :D
توهین نکن دوست من .
سوآلی من نمیبینم که نیاز به پاسخ داشته باشه ؟؟

sedamorde
جمعه 20 آذر 1388, 18:40 عصر
توهین نکن دوست من .
سوآلی من نمیبینم که نیاز به پاسخ داشته باشه ؟؟

دوست عزیز من به کسی توهین نکردم! میشه بفرمایید کدوم قسمت توهین؟
شما سوال نمیبینید؟ من در پست اول چند راهنمایی خواستم و گفتم اگر کمک کنید ممنون میشم! به نظر شما سوال باید چطوری باشه؟

امیـرحسین
جمعه 20 آذر 1388, 21:48 عصر
اطلاعات SESSION توی رم سرور ذخیره میشه یعنی اگر 10000 تا کاربر آنلاین باشند و اطلاعاتی که برای هر کدوم به شکل SESSION ذخیره می کنیم 100 بایت باشه. میشه میشه 975 کیلوبایت فقط برای ذخیره اطلاعات کاربران.
فلسفه دیتابیس اینجا مطرح میشه که بجای اینکه این حجم از فضا از رم اشغال شه، در دیتابیس ذخیره شه و در موارد لزوم قابل دسترس باشه این یعنی کاربردش خاصه و همیشه به صرفه نیست.
نکته بعدی اینکه شما چرا اتصال دیتابیس رو می بندید؟ توابع اصلی MySQL پارامتر اتصال رو دارند (مثل پارامتر دوم mysql_query که میشه اتصالات مختلف رو از هم جدا کرد و نیازی به بستن اولی برای باز کردن دومی نیست.

در رابطه با سوال آخر:

Assess the importance of the data carried by your sessions and deploy additional protections -- this usually comes at a price, reduced convenience for the user. For example, if you want to protect users from simple social engineering tactics, you need to enable session.use_only_cookies. In that case, cookies must be enabled unconditionally on the user side, or sessions will not work.
وقتی این گزینه فعال باشه، فقط زمانی که کوکی مرورگر کاربر فعال باشه، SESSION کار می کنه که باز هم کاربردش خاصه...

sedamorde
جمعه 20 آذر 1388, 23:10 عصر
مرسی امیـرحسین جان از راهنماییت, به این میگن جواب خوب.
شما فکر میکنی با در نظر گرفتن پست 6 استفاده از sql برای session لارم هست و کدام روش امنیت بیشتری داره؟ استفاده از دیتابیس رم نمیگیره؟
mysql را نمیدونم چرا بستم!! مرسی از کمکت :)

امیـرحسین
شنبه 21 آذر 1388, 23:47 عصر
این روش مخصوص بازدید بالاست. مسلما حجم بالای دیتابیس می تونه بهتر از حجم بالای رم باشه البته اگر طراحی دیتابیس درست باشه!

sedamorde
یک شنبه 22 آذر 1388, 11:21 صبح
امیر حسین جان بازدید بالا منظور چقدر در روز حدودا؟ چه چیزهایی در طراحی دیتابیس نقش مهمی داره!؟ مثلا ایندکس کردن, کلید ها ....؟
حالا اگر من توی یک صفحه چندبار, چند دیتابیس را باز کنم به وجود نمیاد؟
مرسی از کمکت و راهنمایینت :)

hidensoft
یک شنبه 22 آذر 1388, 18:11 عصر
داشت دعوا می شدا ! :لبخند:

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

مهم تعداد بازدید ها نیست یا اینکه سشن توی دیتا بیس ذخیره بشه ، مهم اینه که حواسمون به مموری آزاد باشه ، نباید اجازه بدید داده ها بی خودی فضای رم رو اشغال بکنند و مسائل مربوط به اون.

موفق باشید

sedamorde
دوشنبه 23 آذر 1388, 19:11 عصر
مرسی hidensoft عزیز.
دعوا چرا!! به نظر من هر کسی آزاده که نظرش را اعلام کنه ;)
خیلی خوشحال میشم توی مسله ای که الان روش متمرکز شدی هر نتیجه ای به دست آوردی اینجا بگی تا من و بقیه هم استفاده کنیم.

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

من این چند وقت چندتا cms نصب کردم و دیدم همه session ها را در بانک قرار میدن, راستش نفهمیدم چرا؟ البته کار کردن باهاش از بعضی جهت ها ساده تر هست اما نمیدونم سریعتر هم هست و چقدر در امنیت تاثیر داره!
من به چند دلیل دارم از چند بانک استفاده میکنم.
1- اگر روزی حجم اطلاعات زیاد شد سرعت گرفته نشه.
2- اگر خواستم قسمتی از سایت را به یک سرور دیگه ببرم بانک منظمی داشته باشم و مثلا کاربران جدا باشن تا backup گرفتن و امنیت راحت تر و بیشتر باشه.

خلاصه خیلی دوست دارم و تلاش میکنم که یک سیستم سریع و اصولی طراحی کنم, فعلا هم که گیر همین session ها شدم!

مرسی از همه کسانی که راهنمایی کردن و میکنن :)

h.emamie
سه شنبه 24 آذر 1388, 08:48 صبح
اولا : كوكي ها روي رم ذخيره نمي شن و روي سرور به صورت فايل در پوشه tmp مربوط به php قرار دارند به همين دليل روي سرورهاي share از لحاظ امنيتي ضعيف هستند و بهتره session رو توي ديتابيس بسازيد .

دوما : اگر شما به جاي يك db چند تا داشته باشيد ، نمي شه گفت كه mysql اينجوري سريعتر كار مي كنه يا بهتر ، چون مثلا اگر شما دو تا db داشته باشيد ، بايد دوبار به بانك وصل بشيد و در واقع به جاي يك كانال ارتباطي به بانك دو تا داريد و mysql در يك زمان بايد دوتا كانال رو مديريت كنه ، اين مسئله اگر تاثير منفي نداشته باشه ، مطمئنا تاثير مثبت هم نداره .

سوما : حداكثر سايز جداول mysql در سيستم عامل هاي مختلف رو مي زارم شايد به درد خورد :
mysql.com (http://dev.mysql.com/doc/refman/5.0/en/full-table.html)

hidensoft
سه شنبه 24 آذر 1388, 09:06 صبح
كوكي ها روي رم ذخيره نمي شن و روي سرور به صورت فايل در پوشه tmp مربوط به php قرار دارند
نمی دونم برای اطلاع رسانی عرض کاردید یا خیر اما من حرفی از ذخیره شدن کوکی ها در رم نزدم و کاملا بدیهی هست که بخاطر ساختار کوکی نیاز به ذخیره سازی اون در رم وجود ندار.

h.emamie
سه شنبه 24 آذر 1388, 09:49 صبح
نمی دونم برای اطلاع رسانی عرض کاردید یا خیر اما من حرفی از ذخیره شدن کوکی ها در رم نزدم و کاملا بدیهی هست که بخاطر ساختار کوکی نیاز به ذخیره سازی اون در رم وجود ندار.

منظور من شما نبوديد ، بعضي از دوستان (آقا اميرحسين) در پست هاي قبل اين مطلب را مطرح كرده بودند .

sedamorde
سه شنبه 24 آذر 1388, 14:29 عصر
h.emamie ممنون, جه لینک خوبی هم گذاشته بودی.
من برای 2 db فکر این بود که مثلا کاربرها یک جا باشن و بقیه یک جا. به خاطر اینکه قسمت ورود به سایت و عضویت به بقیه قسمت ها کار نداره و این کمک میکنه که بانک من زیاد حجیم نشه و نیازی به 2 کانال نیست!
اما مشکل از جایی شروع شد که من تصمیم گرفتم سشن ها را در بانک بگذارم!
حالا شما میگید من با حدود 10000 کاربر و سشن هاشون چه کنم؟
شما فکر میکنید سایت هایی مثل facebook , yahoo و google و .... چیکار میکنن!!؟

مرسی از همه :)

h.emamie
سه شنبه 24 آذر 1388, 19:36 عصر
سشن ها به تعداد كاربرهايي كه در هر لحظه آنلاين باشند ساخته مي شود ، يعني وقتي شما 10000 كاربر هم داشته باشيد مطمئنا اين 10000 تا كه قرار نيست 24 ساعته در سايت آنلاين باشند ، هميشه درصد كمي از اعضا حدود 100 تا 500 نفر به طور همزمان آنلاين هستند، و مطمئنا mysql خيلي راحت از پس اين تعداد بر مياد ، mysql رو دست كم نگيريد ، قدرتش خيلي بيشتر از اين ها است .

نكته آخر اينه كه معمولا نرم افزار ها بار كاري زيادي رو مي تونند تحمل كنند و در اكثر موارد سخت افزار سرور يا پهناي باند سرور هست كه باعث عدم پاسخگويي مي شه ، پس اين نكته رو هم توجه كنيد كه براي كاركرد بهتر نياز به سرور قوي تر و پهناي باند بيشتر هست .

hidensoft
سه شنبه 24 آذر 1388, 21:40 عصر
سشن ها به تعداد كاربرهايي كه در هر لحظه آنلاين باشند ساخته مي شود ، يعني وقتي شما 10000 كاربر هم داشته باشيد مطمئنا اين 10000 تا كه قرار نيست 24 ساعته در سايت آنلاين باشند
برای جلوگیری از این اتفاق راه هایی هم وجود داره ، توی پروژه های بزرگ همچین اتفاقی فشار بسیار زیادی روی سرور میاره. سایت هایی که بازدیدشون بالای 1 ملیون باشه.

sedamorde
چهارشنبه 25 آذر 1388, 19:13 عصر
سشن ها به تعداد كاربرهايي كه در هر لحظه آنلاين باشند ساخته مي شود ، يعني وقتي شما 10000 كاربر هم داشته باشيد مطمئنا اين 10000 تا كه قرار نيست 24 ساعته در سايت آنلاين باشند ، هميشه درصد كمي از اعضا حدود 100 تا 500 نفر به طور همزمان آنلاين هستند، و مطمئنا mysql خيلي راحت از پس اين تعداد بر مياد ، mysql رو دست كم نگيريد ، قدرتش خيلي بيشتر از اين ها است .

نكته آخر اينه كه معمولا نرم افزار ها بار كاري زيادي رو مي تونند تحمل كنند و در اكثر موارد سخت افزار سرور يا پهناي باند سرور هست كه باعث عدم پاسخگويي مي شه ، پس اين نكته رو هم توجه كنيد كه براي كاركرد بهتر نياز به سرور قوي تر و پهناي باند بيشتر هست .

در درجه اول تشکر بسیار. اگر قرار باشه فقط 500 نفر آنلاین باشن من سایتم را میبندم! ;)
mysql را من اصلا دست کم نگرفتم و میدونم که 10-20 هزارتا براش چیزی نیست اما من دو برنامه دارم میسازم که یکیش بازی آنلاین. تعداد درخواست ها از mysql زیاده برای هیمن حساسیت روی سرعت دارم و بهترین راه حل را میخوام. کدهام را در لینوکس مینویسم و تیکه به تیکه با جند روش سرعت هاش را محاسبه میکنم همینطوری مقدار حافظه ای که میگیره اما این ماجرای session و mysql داره عذابم میده. (واسه همین هم مزاحم شما دوستان حرفه ای شدم)
از احاظ سخت افزاری و پهنای باتد هم خیالم تقریبا راحته چون از یک سرور خیلی خوب و از شرکت خارجی خوب دارم استفاده میکنم.


برای جلوگیری از این اتفاق راه هایی هم وجود داره ، توی پروژه های بزرگ همچین اتفاقی فشار بسیار زیادی روی سرور میاره. سایت هایی که بازدیدشون بالای 1 ملیون باشه.

دوست من میشه بگید چه راه هایی هست؟ مطمنم که من یکی کاری با میلیون و... ندارم اما محظ اطلاع ;)
مرسی.

hidensoft
جمعه 27 آذر 1388, 12:24 عصر
PHP Security Guide: Sessions (http://phpsec.org/projects/guide/4.html)


به اون صورت پیشرفته نیست اما خوندنش برای شما خالی از لطف هم نمی تونه باشه