عملیات رمزگذاری Session در php بصورت خودکار در هنگام ذخیره داده سیشن در حافظه (memory) و خواندن اطلاعات session انجام می شود . هنگام رمزگذاری (encode) , آرایه $_SESSION به یک رشته سریال شده (serialize) تبدیل می شود و هنگام خواندن دوباره سیشن نیز عملیات تبدیل به رشته اصلی نیز انجام می گردد.
این عملیات serialization
همان فرمتی که تابع serialize() در php تولید می کند , را انجام نمی دهد .
داده اینکد شده session شامل تمام المنت های آرایه $_SESSION که با , (simicolon) جدا شده اند , است . هر خانه یا المنت شامل سه بخش است : ایندکس session , طول مقدار ذخیره شده و مقدار ذخیره شده . برای مثال :
1 |
index1|s:length1:"value1";index2|s:length2:"value2";... |
توابع رمزگذاری Session در php (اینکد و دیکد)
Php دو تابع برای encode و decode دستی سیشن ها معرفی کرده است . این توابع بصورت زیر هستند :
- session_encode()
- session_decode()
قبل از استفاده از این توابع , نیاز دارید که انجین سیشن را با فراخوانی تابع session_start()
قبل از هر نوع کد و کاراکتری در خط اول پروژه استارت بزنید.همچنین مقاله انواع خطا در php و output buffering در php را مطالعه بفرمایید
در غیر اینصورت می توانید با قرار دادن مقدار ۱ برای session.auto_start
در فایل پیکربندی php.ini این قابلیت را خودکار کنید.
تابع session_decode() در php داده سریال شده سیشن را دریافت و آن را در یک آرایه برگشت میدهد . این تابع مقدار TRUE
را درصورت موفقیت آمیز بودن عملیات دیکد برگشت می دهد . در واقع تابع session_decode
مقدار آرایه $_SESSION
را با داده های دیکد شده فراخوانی می کند. یک مثال واقعی از رمزگذاری Session در php را ببینم .
مثال رمزگذاری Session در php
در این مثال , ما دو سیشن product_code و logged_in داریم . در زمان فراخوانی session_encode()خروجی رشته سریال شده را در یک متغییر برگشت می دهد .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php session_start(); $_SESSION["product_code"] = "2222"; $_SESSION["logged_in"] = "yes"; $enc_session = session_encode(); print "<b>Encoded Session Data:<br/></b>"; print $enc_session . "<br/><br/>"; // Changing session values $_SESSION['product_code'] = "2000"; $_SESSION["logged_in"] = "no"; // printing $_SESSION print "<b>SESSION Array:<br/></b>"; print "<pre>"; print_r($_SESSION); print "</pre>"; session_decode($enc_session); // printing Reloaded $_SESSION print "<b>Reloaded SESSION Array:<br/></b>"; print "<pre>"; print_r($_SESSION); print "</pre>"; ?> |
زمانی که تابع session_decode
را برای دیکد کردن داده های سیشن فراخوانی میکنیم , در واقع مقدار آرایه $_SESSION
را با داده های ذخیره شده مجددا بارگذاری می کنیم (reload)
در این مثال , ما مقدار product_code و logged_in رو تغییر دادیم اما , مقادیر جدید با داده های سیشن قبلی , هنگام فراخوانی تابع session_decode , جایگزین شدند.
خروجی مثال رمزگذاری Session در php
1 2 3 4 5 6 7 8 9 10 11 |
Encoded Session Data: product_code|s:4:"2222";logged_in|s:3:"yes"; Changed SESSION values: Array ( [product_code] => 2000 [logged_in] => no )Reloaded SESSION Array: Array( [product_code] => 2222 [logged_in] => yes ) |
حتما سعی کنید امنیت سیشن در php را جدی بگیرید و در پروژه های تحت وب خود از توابع و تکنیک های لازم برای افزایش امنیت session در php بهره ببرید.
امیدوارم مقاله رمزگذاری Session در php برای شما عزیزان مفید واقع شده باشد .
برای دریافت سورس کد استفاده شده در اینجا از باکس دانلود استفاده کنید.
هر گونه مشکلی در پیاده سازی کدها داشتید ، از قسمت نظرات اقدام کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید.
با سلام
Session ست شده بعد از یک ساعت از بین می رود، میشه لطفا بفرمائید چطور میشه تایم Session رو به یک هفته تغییر داد؟
با سپاس
سلام.
در این مقاله نحوه افزایش زمان سشن کامل آموزش داده شده :
تعیین تاریخ انقضا برای SESSION در php