PDA

View Full Version : سوال: چرا سسشن ها تغییر می کنن؟



idocsidocs
یک شنبه 17 اردیبهشت 1391, 21:47 عصر
من سسشن ها رو توی دیتابیس ذخیره می کنم و توی لوکال مشکلی ندارم اما وقتی سایت رو توی سرور آپلود می کنم، سسشن ها تغییر می کنن.

این مشکل به چه دلیل ایجاد می شه؟

MMSHFE
دوشنبه 18 اردیبهشت 1391, 00:46 صبح
مشکلی توی Collation دیتابیس ندارین؟ از راههای اشکال زدایی مثل mysql_error و... استفاده کنید ببینید شاید مشکلی توی ذخیره کردن پیش میاد.

idocsidocs
دوشنبه 18 اردیبهشت 1391, 01:06 صبح
مهندس از کلاسی که خودتون نوشتید استفاده می کنم

Collation رو چطور تغییر بدم که مشکل برطرف بشه؟

lady64
دوشنبه 18 اردیبهشت 1391, 08:32 صبح
با عذر خواهی از آقای idocsidocs ، یه سوال اینجا مطرح میکنم .همه ی سشن ها رو باید تو دیتابیس ذخیره کرد و یا اینکه فقط سشن های مهم مثل user و pass ؟

MMSHFE
دوشنبه 18 اردیبهشت 1391, 15:06 عصر
تابع connect رو اینطوری اصلاح کنید:


private function connect() {
mysql_connect($this->server, $this->user, $this->pass) or die('Connection Error');
mysql_select_db($this->db) or die('Database does not exit.');
mysql_query('SET NAMES \'utf8\'');
mysql_set_charset('utf8');
}

بعلاوه چک کنید Collation دیتابیس حتماً utf8_bin باشه.

MMSHFE
دوشنبه 18 اردیبهشت 1391, 15:07 عصر
با عذر خواهی از آقای idocsidocs ، یه سوال اینجا مطرح میکنم .همه ی سشن ها رو باید تو دیتابیس ذخیره کرد و یا اینکه فقط سشن های مهم مثل user و pass ؟
فرقی نمیکنه. بستگی به نیازتون داره ولی در کل وقتی یک شئ از این کلاس بسازین، سشن ها همه توی DB ذخیره میشن.

idocsidocs
دوشنبه 18 اردیبهشت 1391, 15:37 عصر
فرقی نمیکنه. بستگی به نیازتون داره ولی در کل وقتی یک شئ از این کلاس بسازین، سشن ها همه توی DB ذخیره میشن.
مهندس اگه توی یه صفحه چند سسشن تعریف کنیم، بخاطر هر سسشن یه کوئری ایجاد می شه یا اینکه پی اچی پی همه سسشن ها رو می گیره و بعد همه رو با یه کوئری توی دیتابیس ذخیره می کنه؟

MMSHFE
دوشنبه 18 اردیبهشت 1391, 23:16 عصر
نه همه یکجا آماده میشه و بصورت یک رشته برای ذخیره توی DB توسط یک Query تحویل کلاس داده میشه.

idocsidocs
سه شنبه 19 اردیبهشت 1391, 00:55 صبح
نه همه یکجا آماده میشه و بصورت یک رشته برای ذخیره توی DB توسط یک Query تحویل کلاس داده میشه.
اما وقتی اروری ایجاد می شه، برای هر خط که سسشن بکار می ره یه ارور مربوط به دیتابیس نمایش داده می شه؟

MMSHFE
سه شنبه 19 اردیبهشت 1391, 08:49 صبح
اون بحثش جداست. الگوریتم Debugger مفسر PHP این شکلی کار میکنه و خط به خط عملیات رو پیگیری میکنه. اما اگه دقت کرده باشین تمام متغیرهای Session یک فرد یکجا توی یک رکورد قرار میگیره. البته این درمورد مقداردهی اولیه هست و بعداً برای تغییر مقادیر یکی یکی دستور Update اجرا میشه.

idocsidocs
سه شنبه 19 اردیبهشت 1391, 13:03 عصر
اما اگه دقت کرده باشین تمام متغیرهای Session یک فرد یکجا توی یک رکورد قرار میگیره. البته این درمورد مقداردهی اولیه هست و بعداً برای تغییر مقادیر یکی یکی دستور Update اجرا میشه.

فرض کنید مقدار دهی اولیه تمام شده و در ادامه اسکرپیت بخوام مقدار چند سسشن رو تغییر بدم. آیا در این صورت، برای هر سسشن یه کوئری اجرا می شه؟

مسئله دیگه اینکه مقدار دهی اولیه باید چطور باشه که همه مقادیر با یک کوئری اجرا شوند؟ اگر چند سسشن رو در اول اسکریپت تعیین کنم و مقدار چند سسشن رو انتها تعیین کنم، در صورتیکه بین این دو سسشن های گروه اول تغییر کنند، پی اچ پی چند کوئری اجرا می کنه؟

MMSHFE
سه شنبه 19 اردیبهشت 1391, 18:14 عصر
منظورم از مقداردهی اولیه این نیست که همه مقداردهی ها رو اول اسکریپت بگذاریم. منظورم اینه که اولین بار که قراره INSERT اجرا بشه (سشن برای کاربر ایجاد بشه و متغیرها توش قرار بگیره)، همه سشنها یکجا قرار میگیرن و ثبت میشن ولی دستورات UPDATE (تغییر مقدار سشنهای قبلی) تک به تک انجام میشه.

idocsidocs
سه شنبه 19 اردیبهشت 1391, 18:51 عصر
منظورم از مقداردهی اولیه این نیست که همه مقداردهی ها رو اول اسکریپت بگذاریم. منظورم اینه که اولین بار که قراره INSERT اجرا بشه (سشن برای کاربر ایجاد بشه و متغیرها توش قرار بگیره)، همه سشنها یکجا قرار میگیرن و ثبت میشن ولی دستورات UPDATE (تغییر مقدار سشنهای قبلی) تک به تک انجام میشه.


می شه بگید کوئری دوم یا سوم و... دقیقا چه زمانی اجرا می شه؟

اگر می شه لطفا با کد توضیح بدید.

MMSHFE
چهارشنبه 20 اردیبهشت 1391, 08:36 صبح
دوست عزیز من که خیلی ساده گفتم: وقتی برای کاربر سشن تعریف نشده و session_start فایل سشن رو میسازه (که در کد ما، بجاش یک رکورد به جدول سشن اضافه میشه)، به این مرحله میگیم مرحله اول و در اینجا اول همه دستوراتی که با سشن کار میکنن و متغیر توش تعریف میکنن، اول خونده میشن و یک رشته حاوی تمام متغیرها و مقادیر مربوطه ساخته میشه و یکجا توسط دستور INSERT توی دیتابیس درج میشه. از دفعات بعد که این کاربر سشن داره و session_start بجای ایجاد فایل جدید (یا رکورد جدید)، همون قبلیرو میخونه و متغیرهاش رو در اختیارتون قرار میده، به این مرحله و دفعات بعدی که با همین سشن میخوایم کار کنیم (خوندن، ویرایش، حذف و...) میگیم مرحله دوم که در اینجا، هر دستور کار با سشن (خوندن، ویرایش و...) توسط یک کوئری جداگانه (SELECT یا UPDATE و...) اجرا میشه. موفق باشید.

idocsidocs
چهارشنبه 20 اردیبهشت 1391, 16:27 عصر
مهندس از چه طریق می تونم تعداد کوئری های یه صفحه رو بشمارم و نمایش بدم؟