مشاهده دست آورد نظرسنجی: به اين كلاس چه امتيازي مي دهيد؟

رای دهنده
38. شما نمی توانید در این رای گیری رای بدهید
  • عالي

    29 76.32%
  • خوب

    6 15.79%
  • متوسط

    2 5.26%
  • ضعيف

    0 0%
  • بد

    1 2.63%
صفحه 2 از 3 اولاول 123 آخرآخر
نمایش نتایج 41 تا 80 از 103

نام تاپیک: ذخيره Session در DB به جاي فايل

  1. #41
    کاربر دائمی آواتار lady64
    تاریخ عضویت
    مرداد 1390
    محل زندگی
    شمال ایران
    پست
    401

    نقل قول: ذخيره Session در DB به جاي فايل

    با سلام. آقای شهرکی من هنوز نتونستم کاری کنم که با بستن مرورگر سشن ها از پایگاه حذف بشن . میشه کمک کنید .
    کسی این کد رو استفاده کرده ؟ میشه راهنمایی کنید ......

  2. #42
    کاربر دائمی آواتار colors
    تاریخ عضویت
    بهمن 1389
    محل زندگی
    کــردســــــــــتــان
    پست
    1,075

    نقل قول: ذخيره Session در DB به جاي فايل

    درود

    به نظرتون چطوره یه تابعی چیزی بنویسیم که مثلا هر روز یا ... جدول سشن هارو چک کنه و هر رکوردی که modifiedش از تاریخ و ساعت فعلی یکی دوساعت جلوتر بود ( بستگی به مدت زمانی که برای expire شدن سشن در نظر میگیریم ) بیادو اون رکورد رو حذف کنه. اینجوری مرورگرهای که با این کلاس برای حذف سشن سازگار نیستن، دیگه مشکلی نخواهند داشت.

    چون مطمئنا رکوردی که تو پایگاه داده از مدت زمان آخرین ویرایشش چند ساعتی گذشته باشه، یعنی اینکه رکورد بی مصرف شده و دیگه به درد نمیخوره. نظرتون چیه؟

  3. #43
    کاربر دائمی آواتار colors
    تاریخ عضویت
    بهمن 1389
    محل زندگی
    کــردســــــــــتــان
    پست
    1,075

    نقل قول: ذخيره Session در DB به جاي فايل

    اگه از نظر آقای شهرکی اشکالی نداره، کلاسو ویرایش کنم و این قابلیتو بهش اضافه کنم؟
    //Copyright محمد مصطفي شهركي @ http://www.barnamenevis.ir

  4. #44
    کاربر دائمی آواتار mbf5923
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    vb.NET-قسمت کد ویو-لاین هفتم
    سن
    36
    پست
    595

    نقل قول: ذخيره Session در DB به جاي فايل

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

  5. #45

    نقل قول: ذخيره Session در DB به جاي فايل

    سلام

    من وقتی صفحه index رو اجرا می کنم با این خطا مواجه میشم:
    Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in D:\Xamp 1.6.1\xampp\htdocs\mywebsite\sssh.class.php on line 7

    من از php ورژن 4 استفاده می کنم ممکنه مشکل از این باشه؟

    من یکم سرچ کردم، کلمه pubic رو از اول توابع حذف کردم و به جای private از var استفاده کردم و سازنده رو به صورت function MySessionHandler تعریف کردم حالا ارور به صورت زیر میاد:
    Parse error: parse error, unexpected '{' in D:\Xamp 1.6.1\xampp\htdocs\mywebsite\sssh.class.php on line 37
    آخرین ویرایش به وسیله mahsa.norozy : دوشنبه 13 آذر 1391 در 15:13 عصر

  6. #46

    نقل قول: ذخيره Session در DB به جاي فايل

    نقل قول نوشته شده توسط colors مشاهده تاپیک
    اگه از نظر آقای شهرکی اشکالی نداره، کلاسو ویرایش کنم و این قابلیتو بهش اضافه کنم؟
    //Copyright محمد مصطفي شهركي @ http://www.barnamenevis.ir
    هیچ اشکالی نداره دوست عزیز، پروژه Open Source هست

  7. #47

    نقل قول: ذخيره Session در DB به جاي فايل

    نقل قول نوشته شده توسط mahsa.norozy مشاهده تاپیک
    سلام

    من وقتی صفحه index رو اجرا می کنم با این خطا مواجه میشم:
    Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in D:\Xamp 1.6.1\xampp\htdocs\mywebsite\sssh.class.php on line 7

    من از php ورژن 4 استفاده می کنم ممکنه مشکل از این باشه؟

    من یکم سرچ کردم، کلمه pubic رو از اول توابع حذف کردم و به جای private از var استفاده کردم و سازنده رو به صورت function MySessionHandler تعریف کردم حالا ارور به صورت زیر میاد:
    Parse error: parse error, unexpected '{' in D:\Xamp 1.6.1\xampp\htdocs\mywebsite\sssh.class.php on line 37
    این کلاس با PHP4 سازگار نیست. کلاً PHP4 پشتیبانی خوب و کاملی از شئ گرایی نداره.

  8. #48
    کاربر دائمی آواتار navid3d_69
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    تهران
    سن
    33
    پست
    627

    نقل قول: ذخيره Session در DB به جاي فايل

    ذخیره سشن در سیستم های بزرگ باعث نمیشه که سرعت پایین بیاد؟

  9. #49
    کاربر دائمی آواتار mtchabok
    تاریخ عضویت
    آذر 1389
    محل زندگی
    مازندران - ساری
    سن
    37
    پست
    560

    نقل قول: ذخيره Session در DB به جاي فايل

    نقل قول نوشته شده توسط navid3d_69 مشاهده تاپیک
    ذخیره سشن در سیستم های بزرگ باعث نمیشه که سرعت پایین بیاد؟
    نه عزیز.
    اگه شما مدیریت بر اطلاعات سشن در دیتابیس رو کنار سشن در فایل بزارید و با هم مقایسه گنید ، اونوقت متوجه میشید که استفاده از دیتابیس هرچه سیستم بزرگتر باشه دارای سرعت بالاتری هست .

  10. #50

    نقل قول: ذخيره Session در DB به جاي فايل

    نه عزیز.
    اگه شما مدیریت بر اطلاعات سشن در دیتابیس رو کنار سشن در فایل بزارید و با هم مقایسه گنید ، اونوقت متوجه میشید که استفاده از دیتابیس هرچه سیستم بزرگتر باشه دارای سرعت بالاتری هست .
    پس معلوم میشه دوست عزیز هنوز کارای بزرگ دیتابیسی انجام ندادی .
    معمولا بهتر است برای سیستم های بزرگ فایل سرور رو از دیتابیس جدا میکنند و عملیات پردازش سمت دیتابیس رو تا آنجایی که میتونن میارن پتیین . و باید بگم سرعت select و update به میزار رکورد ها در دیتابیس خیلی بستگی داره هرچه رکورد ها زیاد تر باشه سرعت اجرای این دستورات پایین تر میاد . پس کار اشتباهی است که بخوام برای سیستم های بزرگ از ذخیره سشن در دیتابیس استفاده کنیم .

  11. #51

    نقل قول: ذخيره Session در DB به جاي فايل

    بزرگ از نظر شما یعنی چی؟ یعنی چند رکورد در جدول رو حداقل معیار برای بزرگی جدول میدونید؟ بد نیست بدونید ساختار MyISAM به نحوی هست که عملاً تا حدود چند میلیارد رکورد، افت محسوس سرعت نخواهیم داشت (اگه از مواردی مثل Limit با Offset و... استفاده نشه و دیتابیس هم به خوبی نرمالسازی شده باشه). بعلاوه سیستم کاری سشن به نحوی هست که رکوردهای بلا استفاده (سشنهای منقضی شده) حذف میشن. حداقل میشه با کمی تغییر، چنین قابلیتی رو اضافه کرد. بنابراین، چنین مسئله ای محل ایراد نیست. همچنین اگه آسیبهایی مثل Session Hijacking و... رو بررسی کرده باشین، خواهید دید که ارزش داره کمی افت سرعت (که اونهم با روشهایی که گفتم قابل رفعه) رو فدای امنیت بیشتر کنیم. تجربه هم نشون داده سایتها بیشتر بخاطر ناامنی مشتریهاشون رو از دست دادن تا افت سرعت در حد چند صدم ثانیه.

  12. #52
    کاربر دائمی آواتار navid3d_69
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    تهران
    سن
    33
    پست
    627

    نقل قول: ذخيره Session در DB به جاي فايل

    من با این کلاس توی ie مشکل دارم سشن هارو بعد از بستن مرورگر وب پاک نمی کنه

  13. #53

    نقل قول: ذخيره Session در DB به جاي فايل

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

  14. #54
    کاربر دائمی
    تاریخ عضویت
    شهریور 1389
    محل زندگی
    جنوب عشق است
    پست
    1,557

    نقل قول: ذخيره Session در DB به جاي فايل

    IE توی نسخه های قبلیش درست کار میکرد که این هم بخاطر آپدیتهای فوق العاده مایکروسافت، بهم ریخت!
    مایکروسافت مایکروسافت ننگ به نیرنگ تو
    خون برنامه های ما میچکد از چنگ تو !
    جناب شهرکی
    یعنی امکانش هست یک مرورگر بری روی کد های php تاثیر بزاره ؟!
    یعنی ممکنه ما یک برنامه بنویسیم که توی یک سری مرورگر ها درست کار بده توی بقیه نداره ؟

  15. #55

    نقل قول: ذخيره Session در DB به جاي فايل

    ببینید، یکسری کدهای سمت سرور هست که وابسته به هدرهایی هست که توسط مرورگر باید ارسال بشه تا کار کنه و اگه مرورگر اونها رو نفرسته یا درست ارسال نکنه، کدها هم طبیعتاً به درستی کار نمیکنن. البته اینجور کدها خیلی کم هستن (مثل بخش مدیریت سشن و...) ولی بهرحال وجود دارن. برای اینکه مطمئن بشین کلاس درسته و مشکل از مرورگر هست، بدون استفاده از این کلاس با سشن کار کنید و پوشه tmp مسیر Wamp رو چک کنید. خواهید دید که فایل سشن که ساخته میشه، با بسته شدن مرورگر از بین نمیره. معمولاً توی سرورها روی این پوشه Quota میگذارن تا اگه سایزش از یه حد خاصی بیشتر شد، بطور خودکار پاک بشه یا اینکه یک برنامه دائماً درحال اجراست که سایز این پوشه رو چک میکنه و اگه از حد خاصی بیشتر شد، به ترتیب از فایلهای قدیمیتر به جدید، شروع میکنه به حذف کردن تا فضای خالی کافی ایجاد بشه و سایز پوشه هم از حد مجاز بیشتر نشه. اما چون با این کلاس، محل ذخیره سازی سشن رو به دیتابیس منتقل میکنیم، طبیعتاً باید اینکار هم دستی انجام بشه یعنی خودمون براش اسکریپت بنویسیم.

  16. #56
    کاربر دائمی آواتار navid3d_69
    تاریخ عضویت
    شهریور 1388
    محل زندگی
    تهران
    سن
    33
    پست
    627

    نقل قول: ذخيره Session در DB به جاي فايل

    خب پس می شه اینکارو با حذف اطلاعات کل اون جدول در آخر هر شب این مشکل رو حل کرد

  17. #57

    نقل قول: ذخيره Session در DB به جاي فايل

    هم میشه همه جدول رو حذف کرد، هم فقط رکوردهایی که از زمان آخرین فعالیتشون بیش از زمان مشخصی گذشته.

  18. #58
    کاربر دائمی آواتار engmmrj
    تاریخ عضویت
    مرداد 1391
    محل زندگی
    تهران
    پست
    1,146

    نقل قول: ذخيره Session در DB به جاي فايل

    استاد میشه درباره این query توضیح بدین (تا قسمت insert رو متوجه میشم از on به بعد):
     $query="INSERT INTO `sessions` (`id`,`data`,`modified`,`hash`) VALUES ('$safe_id','$safe_data','$now','$hash') ON DUPLICATE KEY UPDATE `data`='$safe_data', `modified`='$now',`hash`='$hash'";

  19. #59

    نقل قول: ذخيره Session در DB به جاي فايل

    میگه اگه رکوردی که میخواد ثبت بشه، کلید تکراری داشته باشه (فیلد `id`)، دستور UPDATE رو اجرا کنه.

  20. #60

    نقل قول: ذخيره Session در DB به جاي فايل

    میگه اگه رکوردی که میخواد ثبت بشه، کلید تکراری داشته باشه (فیلد `id`)، دستور UPDATE رو اجرا کنه.
    وقتی که کاربر موقع لاگین تیک "مرا بخاطر بسپارید" رو زده باشه و بصورت دستی سسشنها رو از دیتابیس حذف می کنم، کاربر از سایت خارج نمی شه و بدون مشکل به کار ادامه می ده

    آیا این موضوع یه حفره امنیتی هست؟

    اگر تیک "مرا بخاطر بسپارید" رو نزده باشه و سسشن ها رو بصورت دستی حذف می کنم کاربر از سایت خارج می شه

  21. #61

    نقل قول: ذخيره Session در DB به جاي فايل

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

  22. #62
    کاربر دائمی
    تاریخ عضویت
    تیر 1389
    محل زندگی
    اصفهان
    پست
    232

    نقل قول: ذخيره Session در DB به جاي فايل

    ممنون ، بابت کلاس ، نظرتون در مورد این 2 تا چیه :

    حالت اول :

    بعد از این که login کامل انجام شد ، من 3 تا Session درست می کنم ، اولی username را در خودش نگه می داره ، دومی user_id و سومی یک hash هست که این هش توی ه دتابیس ذخیره میشه ، بعد وجود Session های کاربر چک میشه ، و Session سوم هم با دتیابیس تطبیق داده میشه. برای rememberme هم کوکی با همین حالت درست می کنیم یعنی یه کوکی به نام ایمیل درست می کنیم ، یه کوکی هش درتس می کنیم که در دیتابیس هم ذخیره میشه .

    حالت دوم :
    قسمت Session مثل بالا است ، ولی تو قسمت Cookie ، میام یه Cookie از user_agent یا ip درست می کنیم ، و کوکی Hash را هم در دیتابیس ذخیره نمی کنیم .

    به نظر شما از لحاظ امنیت و سرعت کدوم بهتر هستش ؟ در ضمن من برای حالت زمان cookie از setcookie استفاده می کنم ، این روش مطمین هست ؟
    آخرین ویرایش به وسیله redhat2 : سه شنبه 25 تیر 1392 در 20:44 عصر

  23. #63

    نقل قول: ذخيره Session در DB به جاي فايل

    سؤالتون ارتباطی به این تاپیک نداره. لطفاً تاپیک جداگانه ایجاد کنید.

  24. #64
    مدیر بخش آواتار ahmad156
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    شیراز
    پست
    2,104

    نقل قول: ذخيره Session در DB به جاي فايل

    نقل قول نوشته شده توسط MMSHFE مشاهده تاپیک
    چه نسخه ای از IE هست؟ نسخه های جدید اومدن درستش کنن، بدترش کردن! دارم روی نسخه جدید اسکریپت کار میکنم. به زودی آماده میشه و توی همه مرورگرها به درستی و بطور کامل کار خواهد کرد. موفق باشید.
    سلام آقای شهرکی.نسخه جدید اسکریپت آماده نشده؟



  25. #65

    نقل قول: ذخيره Session در DB به جاي فايل

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

  26. #66
    کاربر دائمی آواتار id1385
    تاریخ عضویت
    آبان 1387
    محل زندگی
    توی رویاهام!!
    پست
    467

    نقل قول: ذخيره Session در DB به جاي فايل

    با سلام
    من در برنامه هام این شکلی استفاده می کنم
    من یک کلاسی دارم که در تعدادی متد نوشتم که به ضمیمه آمده است.
    سپس در یک کلاس دیگه من اونو گلوبال مینامم و در هر صفحه ام اولین کلاسی است که اینکلود می شه میام و یک مت دارم بعنوان چک کردن اینکه کاربر ورود کرده یا نه به این صورت:

    <?php
    class customer {

    public static function is_customer_loged_in() {
    if (isFile::check(class_path . 'class.enc.inc.php')) {
    include_once (class_path . 'class.enc.inc.php');
    } else {
    return false;
    }
    ;
    $sess = new the_session;
    $enc = new Encryption;
    $sess->ses_free_olds();
    $ses_id = $sess->ses_id();
    $customer_id = $enc->unProtect($sess->ses_read('customer_loged_id'));
    $customer_login = $enc->unProtect($sess->ses_read('customer_loged_as'));
    db::load_db();
    $sql = "SELECT `ID` FROM `customers` WHERE `customer_login` = '{$customer_login}' AND `ID` = {$customer_id} LIMIT 1";
    $found = db::recordCount($sql);
    $keep_me = @mysql_fetch_array(mysql_query("SELECT `KeepMe` FROM `sessions` WHERE `RndKey`= '$ses_id';"));
    if ($keep_me['KeepMe'] == 1 && isset($customer_id) && !empty($customer_id) &&
    isset($customer_login) && !empty($customer_login) && $found > 0) {
    return true;
    }

    if (isset($customer_id) && !empty($customer_id) && isset($customer_login) && !
    empty($customer_login) && $found > 0) {
    return true;
    } else {
    return false;
    }
    }
    }


    فقط همین.
    --
    در این متد یک $sess->ses_free_olds(); داریم که کارش اینه که جلسات منقضی رو حذف می کنه و اگر در موردی که کاربر «مرا بخاطر بسپار» را اگر تیک زده باشه دیگه وارد بررسی ماهوی نمی شه و دایرکت میکنه به صفحه اصلی

    سوالی در این باره بود در خدمت هستم


    موفق باشید
    عکس های ضمیمه عکس های ضمیمه
    فایل های ضمیمه فایل های ضمیمه

  27. #67
    کاربر تازه وارد آواتار reza303
    تاریخ عضویت
    آبان 1392
    محل زندگی
    اصفهان
    پست
    42

    نقل قول: ذخيره Session در DB به جاي فايل

    دوستان یه سوال ...
    به جای این همه کار نمی شه از دستورات زیر موقع لوگین استفاده کرد :
    if (isset($_SESSION['admin_last_ip']) === false)
    {
    $_SESSION['admin_last_ip'] = $_SERVER['REMOTE_ADDR'];
    }
    if ($_SESSION['admin_last_ip'] !== $_SERVER['REMOTE_ADDR'])
    {
    session_unset();
    session_destroy();
    }
    می یایم می گیم اگر سیشن دزدیده شد و طرف خواست استفاده کنه چون آی پیش عوض شد سیشن منقضی بشه .

  28. #68

    نقل قول: ذخيره Session در DB به جاي فايل

    سلام
    من از این کلاس میخوام با pdo استفاده کنم ولی توی _constuct نمیتونه اتصال و پیدا کنه!

    private function connect()
    {
    $db = database::getInstance();
    }

    public function __construct($time_out = 1800, $salt = '') {
    $db = database::getInstance();
    date_default_timezone_set('Asia/Tehran');
    if ($salt == '') {
    $salt = md5('123456789');
    }
    //$this -> server = $server;
    //$this -> user = $user;
    //$this -> pass = $pass;
    //$this -> db = $db;
    $this -> time_out = $time_out;
    $this -> salt = $salt;
    $this -> calcHash();
    $this -> connect();
    session_set_save_handler(array(&$this, 'Open'), array(&$this, 'Close'), array(&$this, 'Read'), array(&$this, 'Write'), array(&$this, 'Destroy'), array(&$this, 'GC'));
    }


    حتما باید توی تمام متد ها این instance ایجاد بشه تا کار کنه!
    موقع اجرای کوئری این ارور میاد
    Fatal error: Call to a member function query() on a non-object
    اگر مثلا تو متد read یا write این خط اولش نوشته بشه دیگه ارور نمیده!!!
    $db = database::getInstance();

  29. #69

    نقل قول: ذخيره Session در DB به جاي فايل

    فقط واسه استفاده بقیه دوستان
    چندتا تغییر تووی کدها دادم که دوتا شون روی همین کلاس فعلی قابل استفاده است
    یکی کوئری مربوط به تابع cg
    DELETE FROM mysessions WHERE MINUTE(TIMEDIFF(NOW(),modified))>=:date


    گه من date رو برحسب دقیقه تنظیم کردم

    دومی تابع write یک شرط ساده اضافه کردم

     if(isset($data) && !empty($data))


    واسه جلوگیری از ساخت سشن خالی و اجرای کوئری write وقتیه که کاربر وارد سایت نشده البته این یکی بستگی به برنامه شما و نحوه استفاده از این کلاس

    چندتا تغییر دیگه هم هست ولی بیشتر جنبه شخصی و نحوه نوشتن کلاس داره

  30. #70

    نقل قول: ذخيره Session در DB به جاي فايل

    نقل قول نوشته شده توسط numberone1 مشاهده تاپیک
    سلام
    من از این کلاس میخوام با pdo استفاده کنم ولی توی _constuct نمیتونه اتصال و پیدا کنه!

    private function connect()
    {
    $db = database::getInstance();
    }

    public function __construct($time_out = 1800, $salt = '') {
    $db = database::getInstance();
    date_default_timezone_set('Asia/Tehran');
    if ($salt == '') {
    $salt = md5('123456789');
    }
    //$this -> server = $server;
    //$this -> user = $user;
    //$this -> pass = $pass;
    //$this -> db = $db;
    $this -> time_out = $time_out;
    $this -> salt = $salt;
    $this -> calcHash();
    $this -> connect();
    session_set_save_handler(array(&$this, 'Open'), array(&$this, 'Close'), array(&$this, 'Read'), array(&$this, 'Write'), array(&$this, 'Destroy'), array(&$this, 'GC'));
    }


    حتما باید توی تمام متد ها این instance ایجاد بشه تا کار کنه!
    موقع اجرای کوئری این ارور میاد
    Fatal error: Call to a member function query() on a non-object
    اگر مثلا تو متد read یا write این خط اولش نوشته بشه دیگه ارور نمیده!!!
    $db = database::getInstance();
    کسی نمیتونه کمک کنه مشکلم حل بشه با این؟

  31. #71

    نقل قول: ذخيره Session در DB به جاي فايل

    داخل کلاس از ()self::getInstance استفاده کنید. برای اینکه بهتر بشه راهنمایی کنیم، کد کامل کلاستون رو بگذارین.

  32. #72

    نقل قول: ذخيره Session در DB به جاي فايل

    سینگلتون هست کلاس اتصال به دیتابیس
    این کد کاملش هست

    class Config {
    public $driver = 'sqlsrv';
    public $dbhost = '127.0.0.1';
    public $dbuser = 'test';
    public $dbpass = '123456';
    public $dbname = 'db';
    }
    class database {
    private static $instance;
    private $stmt;
    private $error = array();
    private $sentinel = 1;
    private $affectedRows = 0;
    private $countRows = 0;
    private function __construct() {
    $config = new Config();
    try {
    $this->instance = new PDO($config->driver.":Server=".$config->dbhost.';Database='.$config->dbname, $config->dbuser, $config->dbpass);
    return $this->instance;
    } catch (Exception $e) {
    echo "can not connect.";
    }
    }
    public static function getInstance() {
    if (!self::$instance instanceof self) {
    self::$instance = new self;
    }
    return self::$instance;
    }
    public function query($sql,$params = null) {
    $this->stmt = $this->instance->prepare($sql);
    $this->stmt->execute($params);
    $this->checkQuery();
    }
    public function loadResult(){
    $singleResult = $this->stmt->fetch(PDO::FETCH_NUM);
    return $singleResult[0];
    }
    public function loadColumn(){
    $columnList = array();
    while($row = $this->stmt->fetch(PDO::FETCH_NUM)){
    $columnList[] = $row[0];
    }
    $this->countRows = count($columnList);
    return $columnList;
    }
    public function loadObject($class_name = "stdClass"){
    $object = $this->stmt->fetchObject($class_name);
    return $object;
    }
    public function loadObjectList($class_name = "stdClass"){
    $objectList = array();
    while($object = $this->stmt->fetchObject($class_name)){
    $objectList[] = $object;
    }
    $this->countRows = count($objectList);
    return $objectList;
    }
    public function loadAssocRow(){
    $assocRow = $this->stmt->fetch(PDO::FETCH_ASSOC);
    return $assocRow;
    }
    public function loadAssocList(){
    $assocList = array();
    while($row = $this->stmt->fetch(PDO::FETCH_ASSOC)){
    $assocList[] = $row;
    }
    $this->countRows = count($assocList);
    return $assocList;
    }
    public function loadIndexedRow(){
    $indexedRow = $this->stmt->fetch(PDO::FETCH_NUM);
    return $indexedRow;
    }
    public function loadIndexedList(){
    $indexedList = array();
    while($row = $this->stmt->fetch(PDO::FETCH_NUM)){
    $indexedList[] = $row;
    }
    $this->countRows = count($indexedList);
    return $indexedList;
    }
    public function loadJsonObject(){
    $jsonObject = json_encode($this->stmt->fetch(PDO::FETCH_ASSOC));
    return $jsonObject;
    }
    public function loadJsonObjectList(){
    $index = 1;
    $jsonObjectList = "";
    while($row = $this->loadAssocList()){
    $jsonObjectList .= json_encode($row);
    if($index <= (count($this->loadAssocList())-1)){
    $jsonObjectList .= ",";
    }
    }
    return $jsonObjectList;
    }
    public function loadXmlDocument($file = null, $root = 'query',$elementName = 'entry'){
    $xml = new DOMDocument('1.0','utf-8');
    $table = $xml->createElement($root);
    foreach ($this->loadAssocList() as $entry){
    $element = $xml->createElement($elementName);
    foreach ($entry as $node => $value) {
    if ($this->valideXmlValue($value)) {
    $field = $xml->createElement($node,$value);
    $element->appendChild($field);
    } else {
    $field = $xml->createElement($node);
    $cdata = $xml->createCDATASection($value);
    $field->appendChild($cdata);
    $element->appendChild($field);
    }
    }
    $table->appendChild($element);
    }
    $xml->appendChild($table);
    if ($file != null) {
    return file_put_contents($file, $xml->saveXML());
    } else {
    return $xml->saveXML();
    }
    }
    public function loadCSVFile($file = null){
    if($file == null){
    $file = date('Ymd-His');
    }
    $writer = fopen($file.'.csv', 'w');
    $temp = $this->loadIndexedList();
    foreach ($temp as $row){
    fputcsv($writer, $row);
    }
    return fclose($writer);
    }
    public function startTransaction(){
    $this->instance->beginTransaction();
    $this->sentinel = 1;
    $this->affectedRows = 0;
    }
    public function endTransaction(){
    if ($this->sentinel == 1) {
    $this->instance->commit();
    } else {
    $this->instance->rollBack();
    }
    return $this->sentinel;
    }
    public function getAffectedRows(){
    return $this->affectedRows;
    }
    public function getCountRows(){
    return $this->countRows;
    }
    public function getError(){
    $e = array();
    $e['ref'] = $this->error[0];
    $e['code'] = $this->error[1];
    $e['desc'] = $this->error[2];
    return $e;
    }
    private function checkQuery(){
    $this->error = $this->stmt->errorInfo();
    if ($this->error[0] != 00000) {
    $this->sentinel = 0;
    }
    // simpre que se realiza un SELECT esto pone $sentinel a 1
    $this->affectedRows = $this->stmt->rowCount();
    if ($this->affectedRows == 0){
    $this->sentinel = 0;
    }
    }
    private function valideXmlValue($value){
    $chars = array('<','>','&');
    foreach($chars as $ilegal) {
    $state = strpos($value, $ilegal);
    if($state !== FALSE){
    return FALSE;
    }
    }
    return TRUE;
    }
    }

  33. #73

    نقل قول: ذخيره Session در DB به جاي فايل

    اینو تست کنید:
    <?php
    class Config {
    public $driver = 'sqlsrv';
    public $dbhost = '127.0.0.1';
    public $dbuser = 'test';
    public $dbpass = '123456';
    public $dbname = 'db';
    }
    class database {
    private static $instance;
    private $stmt;
    private $error = array();
    private $sentinel = 1;
    private $affectedRows = 0;
    private $countRows = 0;
    private function __construct() {
    if(!self::$instance) {
    try {
    $config = new Config();
    self::$instance = new PDO($config->driver.":Server=".$config->dbhost.';Database='.$config->dbname, $config->dbuser, $config->dbpass);
    }
    catch (Exception $e) {
    throw new Exception('Cannot connect.');
    }
    }
    return self::$instance;
    }
    public static function getInstance() {
    return $this->__construct();
    }
    public function query($sql,$params = null) {
    $this->stmt = self::$instance->prepare($sql);
    $this->stmt->execute($params);
    $this->checkQuery();
    }
    public function loadResult() {
    $singleResult = $this->stmt->fetch(PDO::FETCH_NUM);
    return $singleResult[0];
    }
    public function loadColumn() {
    $columnList = array();
    while($row = $this->stmt->fetch(PDO::FETCH_NUM)){
    $columnList[] = $row[0];
    }
    $this->countRows = count($columnList);
    return $columnList;
    }
    public function loadObject($class_name = 'stdClass'){
    $object = $this->stmt->fetchObject($class_name);
    return $object;
    }
    public function loadObjectList($class_name = 'stdClass'){
    $objectList = array();
    while($object = $this->stmt->fetchObject($class_name)){
    $objectList[] = $object;
    }
    $this->countRows = count($objectList);
    return $objectList;
    }
    public function loadAssocRow(){
    $assocRow = $this->stmt->fetch(PDO::FETCH_ASSOC);
    return $assocRow;
    }
    public function loadAssocList(){
    $assocList = array();
    while($row = $this->stmt->fetch(PDO::FETCH_ASSOC)){
    $assocList[] = $row;
    }
    $this->countRows = count($assocList);
    return $assocList;
    }
    public function loadIndexedRow(){
    $indexedRow = $this->stmt->fetch(PDO::FETCH_NUM);
    return $indexedRow;
    }
    public function loadIndexedList(){
    $indexedList = array();
    while($row = $this->stmt->fetch(PDO::FETCH_NUM)){
    $indexedList[] = $row;
    }
    $this->countRows = count($indexedList);
    return $indexedList;
    }
    public function loadJsonObject(){
    $jsonObject = json_encode($this->stmt->fetch(PDO::FETCH_ASSOC));
    return $jsonObject;
    }
    public function loadJsonObjectList(){
    $index = 1;
    $jsonObjectList = '';
    while($row = $this->loadAssocList()){
    $jsonObjectList .= json_encode($row);
    if($index <= (count($this->loadAssocList())-1)){
    $jsonObjectList .= ',';
    }
    }
    return $jsonObjectList;
    }
    public function loadXmlDocument($file = null, $root = 'query',$elementName = 'entry'){
    $xml = new DOMDocument('1.0','utf-8');
    $table = $xml->createElement($root);
    foreach ($this->loadAssocList() as $entry){
    $element = $xml->createElement($elementName);
    foreach ($entry as $node => $value) {
    if ($this->valideXmlValue($value)) {
    $field = $xml->createElement($node,$value);
    $element->appendChild($field);
    } else {
    $field = $xml->createElement($node);
    $cdata = $xml->createCDATASection($value);
    $field->appendChild($cdata);
    $element->appendChild($field);
    }
    }
    $table->appendChild($element);
    }
    $xml->appendChild($table);
    if ($file != null) {
    return file_put_contents($file, $xml->saveXML());
    } else {
    return $xml->saveXML();
    }
    }
    public function loadCSVFile($file = null){
    if($file == null){
    $file = date('Ymd-His');
    }
    $writer = fopen($file.'.csv', 'w');
    $temp = $this->loadIndexedList();
    foreach ($temp as $row){
    fputcsv($writer, $row);
    }
    return fclose($writer);
    }
    public function startTransaction(){
    self::$instance->beginTransaction();
    $this->sentinel = 1;
    $this->affectedRows = 0;
    }
    public function endTransaction(){
    if ($this->sentinel == 1) {
    self::$instance->commit();
    } else {
    self::$instance->rollBack();
    }
    return $this->sentinel;
    }
    public function getAffectedRows(){
    return $this->affectedRows;
    }
    public function getCountRows(){
    return $this->countRows;
    }
    public function getError(){
    $e = array();
    $e['ref'] = $this->error[0];
    $e['code'] = $this->error[1];
    $e['desc'] = $this->error[2];
    return $e;
    }
    private function checkQuery(){
    $this->error = $this->stmt->errorInfo();
    if ($this->error[0] != 00000) {
    $this->sentinel = 0;
    }
    // simpre que se realiza un SELECT esto pone $sentinel a 1
    $this->affectedRows = $this->stmt->rowCount();
    if ($this->affectedRows == 0){
    $this->sentinel = 0;
    }
    }
    private function valideXmlValue($value){
    $chars = array('<','>','&');
    foreach($chars as $ilegal) {
    $state = strpos($value, $ilegal);
    if($state !== FALSE){
    return FALSE;
    }
    }
    return TRUE;
    }
    }

    کلاً وقتی static میگذارین با this$ دسترسی پیدا نکنید و از ::self استفاده کنید.

  34. #74

    نقل قول: ذخيره Session در DB به جاي فايل

    الان به این خط اشکال میگیره!
    Fatal error: Using $this when not in object context

    public static function getInstance() {
    return $this->__construct();
    }

  35. #75

    نقل قول: ذخيره Session در DB به جاي فايل

    خوب این کد رو بجاش بگذارین:
    public static function getInstance() {
    return new self;
    }

  36. #76

    نقل قول: ذخيره Session در DB به جاي فايل

    باز هم ارور میده!
    الان دیگه کلا با همه چیز مشکل داره!

    Fatal error: Uncaught exception 'Exception' with message 'Cannot connect.' in \db.php:24 Stack trace: #0 \db.php(30): database->__construct() #1 sssh.class.php(121): database::getInstance() #2 sssh.class.php(136): MySessionHandler->connect() #3 index.php(4): MySessionHandler->__construct() #4 {main} thrown in db.php on line 24

  37. #77

    نقل قول: ذخيره Session در DB به جاي فايل

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

  38. #78

    نقل قول: ذخيره Session در DB به جاي فايل

    درست کردم اطلاعات و الان این ارور و نمایش میده!
    Fatal error: Call to a member function query() on a non-object
    مربوط به این کد هست

    public function Read($id) {
    //$db = database::getInstance();
    $sql = "SELECT * FROM sessions WHERE id = '$id' ";
    //$params = array(':id' => $id);
    //$query = 'SELECT * FROM `sessions` WHERE (`id`=\'' . mysql_real_escape_string($id) . '\')';
    try {
    $db->query($sql);
    //$result = mysql_query($query);
    } catch(Exception $e) {
    return '';
    }
    /**if (mysql_num_rows($result) != 1) {
    * return '';
    **}
    **/
    $count = $db->getCountRows();
    if($count == 0){
    //return '';
    var_dump($count);
    echo $sql;
    }
    //$data = mysql_fetch_assoc($result);
    $data = $db->loadResult();
    $time = strtotime($data['modified']);
    $hash = $data['hash'];
    if (time() - $time > $this -> time_out || strcasecmp($this -> browser_hash, $hash) != 0) {
    return '';
    }
    return $data['data'];
    }

  39. #79

    نقل قول: ذخيره Session در DB به جاي فايل

    سلام.استاد ممکنه بگین چقدر sessionها قابل اعتماد هستن؟؟مثلا اگه فلان session set شده بود panel مدیریت رو نشون بده یا مشخصات کاربر رو تو فلان session set کن که فلان جا مقادیرشو صدا بزنیم یا مدیریت نمایش پیغام های خطا(مثلا اگه session کد captcha set شده بود فلان پیغام رو نمایش بده)آیا ریسک نیست کار هایی از این قبیل رو با session انجام بدیم(هرچند در بانک ذخیره شن)؟؟؟ممکنه مثلا یبار Session set نشه و یه بخش سایت از کار بیوفته؟؟؟

  40. #80

    نقل قول: ذخيره Session در DB به جاي فايل

    امکان نداره سشن ست نشه. مثل اینه که بگین آیا احتمال داره فلان متغیر توی رم ساخته نشه؟ حتی اگه 0.1 درصد هم چنین اتفاقی بیفته فوقش طرف لاگین نمیشه و دوباره تلاش میکنه تا لاگین کنه.

صفحه 2 از 3 اولاول 123 آخرآخر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

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