/
  • کلاس سشن

  • ارسال پاسخ   امتیاز موضوع:
    • 0 رأی - میانگین امیتازات: 0
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی کلاس سشن
    نویسنده پیام
    ImanAzadi آفلاین
    عضو
    ***

    ارسال‌ها: 246
    تاریخ عضویت: ۱۳۹۲ اسفند ۲
    اعتبار: 0
    تشکرها : 36
    ( 9 تشکر در 9 ارسال )
    ارسال: #1
    کلاس سشن
    با سلام


    یک کلاس برای session با کمک اینترنت نوشتم میخواستم بدونم چه ایراداتی داره

    کد:
    class session
    {


    public function __construct()
    {
        $this->init();
    }    
        public static function init()
        {
            session_start();
        }
        
        
        public static function set($key,$value)
        {
            $_SESSION[$key]=$value;
        }
        
        public static function get($key)
        {
            if (isset($_SESSION[$key]))
            {
                if (!empty($_SESSION[$key]))
                {
                    return $_SESSION[$key];
                }
                else
                {
                    return false;
                }
            }
            
            return false;
        }
        
        
        public static function destory()
        {
            session_unset();
            session_destroy();
        }
        
    }
    (آخرین ویرایش در این ارسال: ۱۳۹۴ اسفند ۱۵ ۰۱:۰۵ صبح، توسط ImanAzadi.)
    ۱۳۹۴ اسفند ۱۴ ۱۲:۲۳ صبح
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    Reza آفلاین
    رضا شیخله
    *****

    ارسال‌ها: 3,025
    تاریخ عضویت: ۱۳۹۰ آبان ۱۶
    اعتبار: 133
    تشکرها : 2724
    ( 2716 تشکر در 1692 ارسال )
    ارسال: #2
    RE: کلاس سشن
    ایراداتی داره ، اینکه هر بار یه object بسازی از کلاس session ، تابع session_start اجرا میشه و اجرای یک بار بیشترش خطا میده
    ایراد بعدیش اینه کلاست خیلی ساده است یخورده روش کار کن
    مثلا به کلیدهات یه رشته یونیک ترکیبی از یوزرایجنت و آی پی کاربر اضافه کن .
    __________________________________________________________________________
    -- - RezaWorkShop.ir - blog.RezaOnline.net
    ۱۳۹۴ اسفند ۱۴ ۰۱:۵۶ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : hamid_80386 ayoubsys
    ImanAzadi آفلاین
    عضو
    ***

    ارسال‌ها: 246
    تاریخ عضویت: ۱۳۹۲ اسفند ۲
    اعتبار: 0
    تشکرها : 36
    ( 9 تشکر در 9 ارسال )
    ارسال: #3
    RE: کلاس سشن
    نقل قول: ایراداتی داره ، اینکه هر بار یه object بسازی از کلاس session ، تابع session_start اجرا میشه و اجرای یک بار بیشترش خطا میده


    در مورد ایراد اول: از کلاس نمونه های زیادی ایجاد و تست کردم ولی خطایی نداد خودمم روی این قضیه شک دارم

    چرا خطا نمیده ؟؟؟؟

    کد:
    session::set('name','iman');
    session::set('email','www@eewe.co');
    session::set('age','28');


    echo session::get('name');echo "<br>";

    echo session::get('email');echo "<br>";
    echo session::get('age');echo "<br>";

    نقل قول: مثلا به کلیدهات یه رشته یونیک ترکیبی از یوزرایجنت و آی پی کاربر اضافه کن .

    منظورتون از یونیک چیه اینو متوجه نشدم !!!
    اگر منظورتون اینه یک کلید منحصر بفرد (uniqid) برای هر سشن ایجاد کنم و با کلید اصلی joint کنم ، بعدا اگه بخوام سشن رو فراخوانی کنم و کلید یونیک رو ندونم که مشکل ایجاد میشه
    میشه یک مثال ساده بزنی شاید من اشتباه متوجه شدم


    یه چیز جالب اینکه من اومدم تو متد init() دستور session_start(); رو غیر فعال کردم اما با کمال تعجب بازم سشن ها ثبت میشن !!!
    (آخرین ویرایش در این ارسال: ۱۳۹۴ اسفند ۱۴ ۰۹:۲۵ صبح، توسط ImanAzadi.)
    ۱۳۹۴ اسفند ۱۴ ۰۹:۱۸ صبح
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    Reza آفلاین
    رضا شیخله
    *****

    ارسال‌ها: 3,025
    تاریخ عضویت: ۱۳۹۰ آبان ۱۶
    اعتبار: 133
    تشکرها : 2724
    ( 2716 تشکر در 1692 ارسال )
    ارسال: #4
    RE: کلاس سشن
    نقل قول: در مورد ایراد اول: از کلاس نمونه های زیادی ایجاد و تست کردم ولی خطایی نداد خودمم روی این قضیه شک دارم
    شما دارید بصورت متد استاتیک استفاده میکنید

    اینو تست کنید
    کد PHP:
    $ses1 = new session;
    $ses1->set('name','iman');



    $ses2 = new session;
    $ses2->set('age',28); 


    نقل قول: منظورتون از یونیک چیه اینو متوجه نشدم !!!
    برای جلوگیری از حملات session و امنیت اسکریپت

    یه سناریو رو میگم تحلیلش کنید
    فرض کنید شما روی دامین example.ir یه اسکریپت دارید و پنل مدیریتش ادمین داره و لاگین بودن ادمین رو با چک کردن موجود بودن سشن is_admin ست کردین
    حالا روی آدرس example.ir/blog باز هم یه اسکریپت نصب کردین و چک کردن لاگین بودن رو با سشن is_admin چک کردین

    حالا مشکلی که پیش میاد ، کسی که توی example.ir لایگن میکنه و is_admin بارش ثبت میشه روی دومی هم همین is_admin ثبت هست و لاگین حساب میشه اونجا که نباید اینطوری باشه
    درسته؟
    __________________________________________________________________________
    -- - RezaWorkShop.ir - blog.RezaOnline.net
    ۱۳۹۴ اسفند ۱۴ ۱۲:۱۰ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : ImanAzadi ayoubsys
    ImanAzadi آفلاین
    عضو
    ***

    ارسال‌ها: 246
    تاریخ عضویت: ۱۳۹۲ اسفند ۲
    اعتبار: 0
    تشکرها : 36
    ( 9 تشکر در 9 ارسال )
    ارسال: #5
    RE: کلاس سشن
    نقل قول: شما دارید بصورت متد استاتیک استفاده میکنید

    دلیل اینکه من از متد استاتیک استفاده میکنم اینه که دارم یه فریم ورک کوچولو مینویسم و برای لود کلاس های مختلف یک autoloader با spl_autoload_register نوشتم
    تابع spl_autoload_register فقط با متدهای استاتیک کار میکنه

    چرا در روش استاتیک خطا نمیده اینو نمیفهمم ؟؟؟؟؟ (یعنی با این روش متد init فقط یکبار اجرا شده که خطا نمیده ؟)

    درسته که در متدهای استاتیک نیازی به نمونه سازی نیست ولی آیا این به این مفهوم است که بعد از پایان عملیات متد ، حافظه هنوز درگیره ؟؟؟؟

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

    قسمت دوم رو گرفتم و ممنون از اینکه وقت گذاشتی عزیز دل انگیز
    ۱۳۹۴ اسفند ۱۴ ۱۲:۴۱ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    Reza آفلاین
    رضا شیخله
    *****

    ارسال‌ها: 3,025
    تاریخ عضویت: ۱۳۹۰ آبان ۱۶
    اعتبار: 133
    تشکرها : 2724
    ( 2716 تشکر در 1692 ارسال )
    ارسال: #6
    RE: کلاس سشن
    نقل قول: دلیل اینکه من از متد استاتیک استفاده میکنم اینه که دارم یه فریم ورک کوچولو مینویسم و برای لود کلاس های مختلف یک autoloader با spl_autoload_register نوشتم
    تابع spl_autoload_register فقط با متدهای استاتیک کار میکنه
    کلید واژه static رو قبل از متد تعریف کنید

    کد PHP:
    static public function set(){} 

    نقل قول: چرا در روش استاتیک خطا نمیده اینو نمیفهمم ؟؟؟؟؟ (یعنی با این روش متد init فقط یکبار اجرا شده که خطا نمیده ؟)
    اصلا اجرا نمیشه Tongue

    وقتی بصورت
    کد PHP:
    $ses1 = new session;
    $ses1->set('name','iman'); 
    استفاده کنین متد __construct اجرا میشه که توش تعریف کردین بره به init و توی init اومدین session_start زدین
    بعد میره متد set رو اجرا میکنه و الباقی داستان

    اما وقتی بصورت استاتیک خود متد رو set رو صدا میزنید
    کد PHP:
    session::set('name','iman'); 
    دیگه متد __construct اجرا نمیشه !!!
    Big Grin
    __________________________________________________________________________
    -- - RezaWorkShop.ir - blog.RezaOnline.net
    ۱۳۹۴ اسفند ۱۴ ۰۵:۴۴ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : ayoubsys
    ImanAzadi آفلاین
    عضو
    ***

    ارسال‌ها: 246
    تاریخ عضویت: ۱۳۹۲ اسفند ۲
    اعتبار: 0
    تشکرها : 36
    ( 9 تشکر در 9 ارسال )
    ارسال: #7
    RE: کلاس سشن
    نقل قول: کلید واژه static رو قبل از متد تعریف کنید


    Confused
    متدهای کلاس ، استاتیک تعریف شدند Big Grin ولی چون من موقع زدن این تاپیک ، دسترسی به کلاس نوشته شده نداشتم ، سریع متدهای اصلی رو تو خود تاپیک دستی نوشتم و فراموش کردم استاتیک رو بنویسم
    بعد فکر کنم static رو باید بعد از public نوشت نه قبل از اون

    پست اول اصلاح شده و کلید static اضافه گردید
    کد:
    public static function set(){}

    پس با این اشتباهی که پیش اومده ما از ابتدای تاپیک جفتمون داریم راه خودمون رو میریم Big GrinBig GrinTongue
    شما فکر کردید که متدها public هست در صورتیکه static بودن
    برای همین فرمودید

    نقل قول: شما دارید بصورت متد استاتیک استفاده میکنید

    نقل قول: کلید واژه static رو قبل از متد تعریف کنید

    ولی این اشتباه رو داشتم که متد init رو در construct تعریف کردیم در صورتیکه طبق گفته شما فراخوانی استاتیک متد construct اجرا نمیشه

    حالا بنظر شما تابع init رو کجا تعریف کنم که زمانی که متد set یا get فراخوانی شد دستور session_start(); اجرا بشه ؟؟؟؟
    (آخرین ویرایش در این ارسال: ۱۳۹۴ اسفند ۱۵ ۰۱:۰۶ صبح، توسط ImanAzadi.)
    ۱۳۹۴ اسفند ۱۵ ۰۱:۰۳ صبح
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    Reza آفلاین
    رضا شیخله
    *****

    ارسال‌ها: 3,025
    تاریخ عضویت: ۱۳۹۰ آبان ۱۶
    اعتبار: 133
    تشکرها : 2724
    ( 2716 تشکر در 1692 ارسال )
    ارسال: #8
    RE: کلاس سشن
    نقل قول: دلیل اینکه من از متد استاتیک استفاده میکنم اینه که دارم یه فریم ورک کوچولو مینویسم و برای لود کلاس های مختلف یک autoloader با spl_autoload_register نوشتم
    تابع spl_autoload_register فقط با متدهای استاتیک کار میکنه
    کد PHP:
    $obj = new session;
    spl_autoload_register(array($obj'init')); 
    نقل قول: بعد فکر کنم static رو باید بعد از public نوشت نه قبل از اون
    Dodgy

    نقل قول: حالا بنظر شما تابع init رو کجا تعریف کنم که زمانی که متد set یا get فراخوانی شد دستور session_start(); اجرا بشه ؟؟؟؟
    متد استاتیک نذار ، یخورده باحالترش کن ، کلاس singleton بنویس Big Grin
    __________________________________________________________________________
    -- - RezaWorkShop.ir - blog.RezaOnline.net
    ۱۳۹۴ اسفند ۱۵ ۰۱:۴۰ صبح
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : ayoubsys
    « قدیمی تر | تازه‌ تر »

    ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS