تعداد بازدید: 1899

Sessions Storage

HTTP Session یک حافظه نیمه دائمی که در سرور ذخیره می شود می باشد. در لاراول به محض ارسال درخواست از سوی کاربر و ایجاد شئ request استارت session رو داریم. همچنین به وسیله شئ request هم به session ها دسترسی خواهیم داشت.

ما در برنامه نویسی PHP یک سری حافظه ذخیره سازی داشتیم. متغیر یک حافظه موقتی در جریان برنامه بود. session یک حافظه نیمه دائمی در برنامه ماست. نیمه دائمی از جهتی که پس از اتمام برنامه هنوز هم موجوده ولی در نهایت عمر مفیدی داره که در تنظیمات اپلیکیشن با نام SESSION_LIFETIME قابل تعیین برای ماست.

session یعنی نشست . نشست به ازای هر کاربر ، و در نتیجه به ازای هر کاربر یه سری اطلاعات خواهیم داشت. کاربر اگر لاگین باشد یا نباشد session هایی که برای او ذخیره شده متفاوت می باشد.پس همان طور که به ازای هر درخواست یک متغیر request داریم به ازای هر request یک session خواهیم داشت.

session به ازای هر اتصال یک کاربر خاص ⇐ اطلاعات session مربوط به کاربر متصل

تنظیمات موجود در لاراول برای session :

  • SESSION_DRIVER : تعیین نوع درایور که می تونه file , redis , database باشه. نوع درایور اگر فایل باشه در مسیر storage/framework/sessions قرار می گیره. به ازای هر فرد یک درخواست (request) و به ازای هر درخواست session داریم. محتوای فایل یک رشته serrialize شده است که حاوی اطلاعات کاربر می شه.
  • SESSION_LIFETIME : هر session عمر مفید داره. در تنظیمات مربوط به session قسمتی داریم تحت عنوان expire_on_close که اگر برابر با true قرار بگیره به محض بسته شدن مرورگر کاربر session از بین میره. حالا اگر برابر false باشه قراره مدت زمان خاصی در برنامه session زنده باشه. این مدت زمان بر حسب دقیقه در این پارامتر قرار میگیره.

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

ما به وسیله متد session() از شئ request به session ها دسترسی داریم و میتونیم مقداری از اون ها رو بگیریم (get) یا مقداری در اون set کنیم (put). مثلا می توانیم session با نام prefix را مقدار gnutec ثبت و دریافت کنیم.

$Request->session()->put('prefix','gnutec');
$Request->session()->get('prefix');

شئ request در کد بالا Illuminate\Http\Request $Request است که می تواند شئ مورد توسط کلاسی که شما از روی FormRequest ساخته اید instantiate شده باشد.

در مثال زیر در ازای درخواست route برابر با setsession از سوی کاربر یه سری session با نام های name و prefix برای کاربر درخواست کننده موجود در نشست ذخیره می شود.

<?php
Route::get('setsession',function(Illuminate\Http\Request $request){
    $request->session()->put('prefix','gnutec');
    $request->session()->put('name','abolfazl');
});

Session Driver File

به ازای هر نشست (اتصال به نرم افزار توسط کاربر) یک فایل در مسیر storage/framework/sessions ساخته می شود و هر فایل محتوی آن یک آرایه serialize شده است که به صورت یک رشته است و اعضای آن آرایه اطلاعات مربوط به session می باشد. ساختار زیر unserialize شده رشته درون یک فایل session می باشد.

Array
(
    [_token] => 0z2u8w3CJEGU6Agr7Q4U0PaK22MYKlMe5J00XH9l
    [prefix] => gnutec
    [name] => abolfazl
    [_previous] => Array
        (
            [url] => http://127.0.0.1:8000
        )

    [_flash] => Array
        (
            [old] => Array()
            [new] => Array()
        )
)

مقدار token همان مقدار یکتا به ازای هر کاربر متصل می باشد که web middleware همیشه آن را چک می کند تا درخواست ها را اعتبار سنجی کند.

در ساختار بالا ما مقادیر prefix و name توسط ما بوسیله متدهایی که قبل تر گفتیم وارد شده است.

مقادیری که به صورت key , value در حافظه session ذخیره می کنید موقتی (SESSION_LIFETIME) و به ازای هر اتصال (کاربر) می باشد.

Session Driver DataBase

جهت استفاده از session driver به صورت جدولی از پایگاه داده باید ابتدا migration مربوط به session را پیاده سازی کنیم. برای این کار کافی است ابتدا migration مربوط به جدول session را بسازیم و بعد آن را migrate کنیم .

php artisan session:table
php artisan migrate

پس از اجرای دستورات بالا لازم است تا تنظیمات session driver را بر روی database قرار دهیم . برای این کار باید در تنظیمات فایل .env و همچنین تنظیمات مربوط به session واقع در مسیر config/app.php مقدار SESSION_DRIVER را برابر با database قرار دهیم.
نکته : لازم است پس از این کار یک بار سرور را متوقف و مجددا راه اندازی کنیم تا تنظیمات جدید اعمال شود.

اگر محل ذخیره session را برابر با پایگاه داده قرار دهیم اطلاعات session ذخیره می شود و همان گونه که در زمان فایل به ازای هر نشست یک فایل در مسیر storage/framework/sessions ساخته میشد این بار یک سطر در جدول sessions ثبت می شود.

+---------------+------------------+------+-----+---------+-------+
| Field         | Type             | Null | Key | Default | Extra |
+---------------+------------------+------+-----+---------+-------+
| id            | varchar(255)     | NO   | PRI | NULL    |       |
| user_id       | int(10) unsigned | YES  |     | NULL    |       |
| ip_address    | varchar(45)      | YES  |     | NULL    |       |
| user_agent    | text             | YES  |     | NULL    |       |
| payload       | text             | NO   |     | NULL    |       |
| last_activity | int(11)          | NO   |     | NULL    |       |
+---------------+------------------+------+-----+---------+-------+

اطلاعات موجود در سطرهای جدول sessions نیز مثل فایل ها در ازای اتفاقات مختلف در نرم افزار مثل لاگین کاربر تغییر می کند.

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای Sessions Storage

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *