رتبه موضوع:
  • 1 رای - 4 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
ذخیره سشن در دیتابیس
#16
سلام، استاد این کلاس رو در صفحه ای که قرار لاگین بشه، وارد کردم :
                case'logIn':
                    function AutoLoad($class) {
                        require_once 'Classes/Class.' . $class . '.php';
                    }
                    spl_autoload_register('AutoLoad');
                    $dbsh = new DBSessionHandler();
                    $result = User::logIn($_POST['userName'], $_POST['passWord']);
                    if ($result) {
                        if (!empty($_SERVER['HTTP_REFERER'])) {
                            header("Refresh:5;url={$_SERVER['HTTP_REFERER']}");
                        } else {
                            echo "هیچ بازگشتی نیست ! لطفا به صورت دستی به صفحه قبل باز گردید !";
                        }
                        $_SESSION['id'] = $result['id'];
                        $_SESSION['firstName'] = $result['firstName'];
                        $_SESSION['lastName'] = $result['lastName'];
                        $_SESSION['userName'] = $result['userName'];
                        $_SESSION['passWord'] = $result['passWord'];
                        $_SESSION['mail'] = $result['mail'];
                        $_SESSION['file'] = $result['file'];
                        $_SESSION['IC'] = $result['IC'];
                        $_SESSION['biography'] = $result['biography'];

                        require_once('Classes/Statistics.php');

                        $onLine = new Statistics();
                        $onLine->addStatistics($_SESSION['userName'], $_SESSION['id']);

                        $allVisit = new Statistics();
                        $allVisit->addAllStatistics($_SESSION['userName']);

                    } else {
                        echo "<div>اطلاعات وارد شده نادرست می باشد !</div>";
                        if (!empty($_SERVER['HTTP_REFERER'])) {
                            header("Refresh:5;url={$_SERVER['HTTP_REFERER']}");
                        } else {
                            echo "هیچ بازگشتی نیست ! لطفا به صورت دستی به صفحه قبل باز گردید !";
                        }
                    }
                    break;

حالا موقعی که فرد لاگین می کنه، جدول داخل دیتابیس ثبت می شه، ولی سشن ها رو نه در دیتابیس ثبت می کنه و موقعی که در صفحه Home.php برنامه ام می رم، با این که با این کد کلاس ها رو require می کنم :
 function AutoLoad($class) {
        require_once 'Classes/Class.' . $class . '.php';
    }
    spl_autoload_register('AutoLoad');
    $dbsh = new DBSessionHandler();


اما به جای لاگین و ثبت نام، نام کاربری کاربری که لاگین کرده رو نمی نویسه ...
چی کار کنم ؟ Blush
پاسخ
تشکر شده توسط:
#17
اگر دوستان ما رو راهنمایی کنن، ممنون می شیم ...
پاسخ
تشکر شده توسط:
#18
باید چک کنید چرا ثبت نمیشه. شاید خطایی توی کوئریها دارین. چک کنید تنظیمات دیتابیس درسته؟
پاسخ
تشکر شده توسط:
#19
قبل از اتصال کلاس درست کار می کرد و مشکلی نداره، تنظیمات دیتابیس رو هم درست کردم، برام جالبه که جدول رو ایجاد می کنه ولی سشن رو استارت نمی کنه و ثبتش هم نمی کنه ...
پاسخ
تشکر شده توسط:
#20
خطاهای MySQL رو نمایش بدین ببینیم مشکل از چیه.
پاسخ
تشکر شده توسط:
#21
چطور باید نمایش بدم ؟ Big Grin
پاسخ
تشکر شده توسط:
#22
کسی از دوستان نمی دونه مشکل از کجاست ؟
پاسخ
تشکر شده توسط:
#23
error_reporting رو on کنید ببینید چیزی دستگیرتون میشه یا نه
پاسخ
تشکر شده توسط:
#24
(30-04-1394، 11:17 ب.ظ)ABZiko نوشته: چطور باید نمایش بدم ؟ Big Grin

وا !
echo mysqli_error();
پاسخ
تشکر شده توسط:
#25
استاد بنده چون از MVC و PDO استفاده می کنم، MySQLi رو بلدم نیست ... Cool Big Grin
استاد توی همون صفحه ای که لاگین صورت می گیره این کد رو بزارم؟ چون گذاشتمش ، این ارور رو داد ...


نقل قول:
( ! ) Warning: mysqli_error() expects exactly 1 parameter, 0 given in D:WampServerwwwdribbbleInitial.php on line 555
Call Stack
# Time Memory Function Location
1 0.0030 247624 {main}( ) ..Initial.php:0
2 0.0344 405624 mysqli_error ( ) ..Initial.php:555
پاسخ
تشکر شده توسط:
#26
برای MySQLi باید متغیری که کانکشن رو داخلش ذخیره کردین بعنوان پارامتر به تابع mysqli_error بدین.
برای PDO هم میتونید از متد errorInfo روی شئ PDO استفاده کنید.
پاسخ
تشکر شده توسط: olampiad
#27
سلام
تشکر فراوان بابت کلاس خوبتون
به این کد من ی نگا بندازید.

<?php
require_once('session.php');
require_once('db.php');
$dbsh = new DBSessionHandler();
$_SESSION['one']='two';
$_SESSION['three']='fore';
?>

مشکل این کد کجاست؟
چرا این کد تو جدول ردیف ایجاد نمیکنه.
خیلی ممنون.
مرسی
پاسخ
تشکر شده توسط:
#28
سلام
میدونم در این مورد خیلی بحث شده.
من خودم دو سه روزی میشه که تو انجمن های مختلف php دنبال این مبحث بودم و تاپیک های ایجاد شده رو مطالعه میکردم.
خیلی از افراد ذخیره سشن در یتابیس رو قبول داشتن و بعضی ها هم این مبحث رو قبول نداشتن.
خیلی جاها میگفتن ذخیره سشن در دیتابیس در سایت های شلوغ باعث میشه که روی سرور فشار بیاد و سرور پاسخ گو نباشه.
تو بعضی جاهاهم میگفتن دخیره سشن در دیتابیس خیلی بهتره.
مثلا تو ی جایی خوندم که yii هم از مکانیزم ذخیره سشن در دیتابیس استفاده میکنه.
حالا
میشه کسی بیاد و منو قانع کنه که از کدوم روش استفاده کنم.

برای امنیت هم که گفتن سشن ها رو کد گذاری کنیم.
ممنون.
پاسخ
تشکر شده توسط:
#29
ببینید، اینکه دقیقاً بگیم توی دیتابیس گذاشتن خوبه یا نه ممکن نیست چون بستگی به نوع پروژه و میزان ارتباط با سشن و استفاده از متغیرهای سشن توی بخشهای مختلف پروژه و... داره ولی یه چیزی کاملاً قطعیه و اونم اینه که کنترل سشن رو خودتون در دست بگیرین. حالا شده با فایل یا با دیتابیس ولی حداقل کاری که انجام میدین، مسیر ذخیره سازی فایلهای سشن رو از محل پیشفرض که مشترک هست تغییر بدین و مثلاً یه پوشه توی هاست خودتون و ترجیحاً بالاتر از public_html بگذارین.

Yii هم همیشه از مکانیزم ذخیره سشن توی دیتابیس استفاده نمیکنه و فقط این قابلیت رو داره و بعنوان یه فریمورک کامل و Full Stack، این ویژگی رو برای راحتی شما داخل خودش پیاده سازی کرده ولی دیگه بستگی به شما داره که درصورت نیاز و تمایل خودتون، از این قابلیتش استفاده کنید یا نه.
پاسخ
تشکر شده توسط: olampiad
#30
(30-06-1394، 08:27 ب.ظ)olampiad نوشته: سلام
تشکر فراوان بابت کلاس خوبتون
به این کد من ی نگا بندازید.

<?php
require_once('session.php');
require_once('db.php');
$dbsh = new DBSessionHandler();
$_SESSION['one']='two';
$_SESSION['three']='fore';
?>

مشکل این کد کجاست؟
چرا این کد تو جدول ردیف ایجاد نمیکنه.
خیلی ممنون.
مرسی

درصورت لزوم پیغامهای خطا رو با دستورات زیر نمایش بدین ببینیم چرا کار نمیکنه:
error_reporting(E_ALL);
ini_set('display_errors', 'On');

اگه خطایی نبود، یه متد Error به کلاس DB اضافه کنید که خطای MySQLi رو نمایش میده و اون رو هم صدا بزنید تا ببینیم علت درج نشدن توی دیتابیس چیه.
پاسخ
تشکر شده توسط: olampiad




کاربران در حال بازدید این موضوع: 4 مهمان