دوره مجازی PHP (جلسه 18): کار با کوکی ها (cookies) و سشن ها (Sessions)



visibility  
mode_comment   ۴۹

امروز در مورد یکی از کاربردیترین مباحث در زبان PHP بحث می کنیم . کوکی ها و سشن ها امکانی رو برای شما فراهم می کنند که بتونید مابین صفحات مختلف یک وبسایت بعضی داده ها رو منتقل کنید و ازشون استفاده کنید . امروز به تشریح کاربرد ها، مثال ها و تفاوت های ایندو می پردازیم که قطعا جلسه ی مهم و حیاتی ای هست در زبان PHP .

مباحث گفته شده در جلسه امروز عبارتند از :

فصل 14 : Cookie ها و Session ها در PHP و تفاوت کاربرد آنها

  • کوکي و سشن : تعريف مفاهيم و تشريح تفاوت هاي آن ها
  • تشريح کاربرد هاي کوکي و موارد استفاده از آن
  • توضيح در مورد آرايه ي $_COOKIE
  • کار با کوکي ها در PHP
  • ايجاد و تنظيم کوکي ها
  • خواندن و استفاده از کوکي ها
  • حذف و از بين بردن کوکي ها
  • نحوه ي تعيين زمان انقضاي کوکي ها
  • مشاهده و مديريت دستي کوکي ها در مرورگرهاي مختلف
  • تشريح کاربرد هاي سشن و موارد استفاده از آن
  • توضيح در مورد آرايه ي $_SESSION
  • کار با سشن ها در PHP
  • ايجاد و تنظيم سشن ها
  • خواندن و استفاده از سشن ها
  • حذف و از بين بردن سشن ها
  • هش کردن اطلاعات حساس (مثل رمزهاي عبور) براي امنيت بيشتر
  • مقايسه ي الگوريتم هاي مختلف هش کردن اطلاعات
  • مینی پروژه 1 : نمایش تعداد بازدید کاربر از صفحات مختلف سایت و نمایش کل بازدیدهای او
  • ميني پروژه 2 : احراز هويت (Authentication) کاربران و پياده سازي فرايند ورود و خروج با سشن ها 
  • تمرين
info توجه

این مطلب یک جلسه از اموزش php حرفه ای می باشد و برای مشاهده آن باید در دوره ثبت نام کنید.

ثبت نام در اموزش php حرفه ای

comment دیدگاه کاربران
sevencloob replyپاسخ

سلام استاد آوند خسته نباشی رسیدم به جلسه 18 و دارم واسه تمرین یه چت روم ساده مینویسم ولی مشکلی که دارم با نمایش اعضای انلاین چت رومه یعنی اونایی که فرم لاگین رو پر کردندو وارد صفحه index چت روم شدند هر کاری کردم نشد با سشن انجام بدم و رو اوردم به دیتابیس حال سوالم اینه که دستوری تو php هست که وقتی کاربر پنجره مرورگرو ببنده بیاد یه کوئری update تو دیتابیس انجام بده و فیلد اپدیت کاربرو صفر کنه؟

لقمان آوند

سلام
اینکارو باید تو دیتابیس انجام بدی و سشن مناسبش نیست . کافیه یه جدول به نام آنلاین ها بسازی و آیدی کاربرایی که لاگین شدن و آنلاین هستند رو توش بزاری . باید زمان آخرین فعالیت کاربر رو هم به عنوان یه فیلد دیگه توی این جدول قرار بدی. کاربر هرکاری می کنه و هر فعالیتی که انجام میده باید این زمان آخرین فعالیتش آپدیت بشه . آنلاین ها رو می تونی اونهایی در نظر بگیری که در یک یا چند دقیقه ی اخیر فعالیتی داشتند .
البته با روشی هم که خودت در نظر گرفتی هم میشه اینکارو انجام داد .
ممکنه بشه با اتصال یک تابع جاوااسکریپت و ارسال یک درخواست ایجکس به سمت سرور در رویداد بستن مرورگر کدی رو در سمت سرور اجرا کرد …

sara salami replyپاسخ

سلام اون کدی که در درس کامنت شده ومربوط به مدت زمان لاگین کاربرهست وگفتیدایرادی کوچیک داره میشه ایراد توضیح کمی راجع به ایراد بدید.ممنونم از شما .

لقمان آوند

سلام
توی تابع isLogin باید چک کنید که اگر کاربر لاگین بود حالا بیاد سشن last_action_time رو آپدیت کنه . در کدی که اونجا نوشتیم اینطور نبود. اول last_action_time رو چک کردیم و بعد login رو return کردیم !

امین کاظمی replyپاسخ

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

لقمان آوند

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

امین کاظمی

ممنون استاد درست شد.
فقط در کوکی ها با unset کوکی به درستی حذف میشه، اما در setcookie باید حتما پارامتر path رو مقدار دهی کنم که من همون ‘/’ میزارم.

آرمین replyپاسخ

آقای آوند آقای کاظمی درست میگن برای حذف کوکی ها باید پارامتر path رو هم مقدار بدیم . چرا اینطوریه ؟

لقمان آوند

طبیعیه .
شما باید مشخص کنید کوکی در چه بخشی قابل استفاده باشه . اگر ست نکنید پیشفرضش دیرکتوری جاری هست و ممکنه در بقیه بخش های سایت کار نکنه.
همیشه سعی کنید این مسیر رو با دقت برای بخشی که کوکی می تونی در دسترس باشه، تعین کنید …

Farshad replyپاسخ

سلام
در رابطه با تمرین: میشه cookie با اطلاعاتی ست بشه که حتی اگر ازکاربر به سرقت هم بره قابل استفاده نباشه مثلا:cookie که در مرورگر کابر ذخیره میشه , md5 نام کاربری باشه ولی اونی که تو دیتابیس ذخیره می شه باشه hash (کوکی کاربر + ip کاربر) .
البته آیپی و مک آدرس نمی شه . چیزدیگه ای هست؟

لقمان آوند

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

Farshad

منظورم این بود اگه بخوام همچین کاری بکم باید با اطلاعاتی که برای هر کاربر متفاوت هست انجام بدم .
تا جایی که من اطلاع دارم آیپی نمشه چون همه آیپی ها static نیستند
با مک آدرس هم نمی شه چون قابل تغییر هست.
پس با چه اطلاعاتی این کار رو انجام بدم؟؟؟

لقمان آوند

اینکه بگید یه چیزی از کاربر داشته باشید که همیشه ثابت باشه وجود نداره. مگر اینکه کاربر عضو سایتت باشه و از نام کاربری یا ایمیلش استفاده کنی برای کد کردن اطلاعات !

Behnam Ahmadi replyپاسخ

سلام,جناب آوند هنگام لاگین شدن کاربر اطلاعات مورد نظر از قبیل یوزر نیم و سایر اطلاعات مورد نیاز در آرایه سوپر گلوبال سشن ذخیره میشه,حالا من خواستم ازتون بپرسم که روی هاست اصلی این اتفاق به چه صورت صورت میگیره چرا که در هر لحظه چندین کاربر قصد لاگین شدن دارن و قراره که با این آرایه سشن ارتباط بگیرن,چطور ایندکس این آرایه عوض میشه و از کجا این آرایه متوجه میشه که باید ایندکس رو تغییر بده یا به عبارتی کاربر جدیدی قصد ذخیره اطلاعات رو داره,با سپاس از زحماتتون

لقمان آوند

سلام
برای هر کاربر یه session id انتخاب میشه و اطلاعات سشن اون در یه فایل در سرور ذخیره میشه و برای هر کاربر از اون فایل سشن مربوط به خودش خونده میشه .

Behnam Ahmadi

خیلی ممنون جناب آوند

Behnam Ahmadi replyپاسخ

سلام مجدد خدمت جناب آوند عزیز
استاد به شخصه تا همین الان خیلی از دوره شما مطلب یاد گرفتم و خدا رو شکر با توجه به مطالب تدریس شده اگر احیانا ایده و یا مطلب جدیدی به ذهنم میرسید به راحتی قابل پیاده سازی بود لذا بازم ممنونم.
جناب آوند فقط یه سوال درباره بحث لاگ اوت شدن:
من وقتی لاگ اوت میشم کافی یه بار back بزنم و صفحه را رفرش کنم و دوباره لاگین میشم که این یه باگ امنیتی محسوب میشه ، علی رغم اینکه سشن رو unset میکنم اتفاقی نمیفته،حتی session-destroy را هم امتحان کردم و از header هم استفاده کردم ولی نشد،لطفا راهنمایی بفرماید.

لقمان آوند

بعد از لاگین شدن کاربر رو با دستون header به آدرس دیگه ای منتقل کنید . این بخاطر ارسال مجدد اطلاعات فرم لاگین هست .

Farhad Farokhi replyپاسخ

سلام
من از یه قالبی استفاده میکنم که در صفحه اولش یک کوئری داره از پست هام و بصورت کاروسل carousel حرکت میکنه
منتهی الان وقتی عکس تصویر شاخص مطلب رو عوض میکنم داخل صفحه مطلب عوض میشه اما در صفحه اصلی صویرش عوض نمیشه

مشکل از کجا میتونه باشه استاد؟

لقمان آوند

باید کدهاتون رو بررسی کنید …

Aref Taker replyپاسخ

سلام
برای تمرینی که گفتید(ذخیره کوکی ها در دیتابیس ) منبع مناسبی رو پیدا نکردم.کاش این کار رو تو ویدیو خودتون انجام می دادید 😐
من این عبارت رو سرچ کردم ولی مطلبی که کد اسکریپت و بده نبود:
Php Implement Remember Me

لقمان آوند

اینا رو ببین : لینک1 لینک2 لینک3

pcbrain replyپاسخ

سلام و عرض ادب . برای ایجاد فرم لاگین ، از اون حالتی که فرمودید استفاده کنیم بهتره یا کد زیر

if($_SESSION[‘login’] == false){
echo “you are not login !”;
exit(0);
}

لقمان آوند

الان این که شما نوشتید فرقش چیه ؟ روش که همون هست …

empera2r replyپاسخ

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


کد بالا به جای اینکه یکی یکی به سشن اضافه کنه 3 تا 3تا اضافه میکنه و اگر اون 1 رو هم 2 بکنم 6 تا 6تا اضافه میکن (مضربی از 3)

ویرایش (کامنت) :
بعد از چندین بار تغییرات در کمال ناباوری بعد از تغییر اسم فایل مشکل حل شد آقای آوند دلیل بوجود اومدن همچین وضعیت چی هستش ؟

لقمان آوند

سلام
کدت منطقی و درست هست. ممکنه اختلال موقتی در مرورگر یا وب سرورت ایجاد شده بوده . یا اینکه چند بار فایلو باز کردی و رفرش کردی که این سشن بیش از 1 واحد افزایش پیدا کرده !

empera2r

ممنون..احتمالا یک اختلالی پیش اومده چون من صفحه رو فقط یکبار رفرش میکردو خیلی برام عجیب بود همچین اتفاقی به هر حال تشکر

mostafash replyپاسخ

من یک صفحه لاگین برای پنل مدیریت درست کردم و وقتی که نام کاربری و کلمه عبور را وارد می کنم با پیغام زیر مواجه میشم
Warning: session_start(): Cannot send session cookie – headers already sent by (output started at /home2/chaaboki/domains/kasrasystem.ir/public_html/admin/admin-panel.php:8) in /home2/chaaboki/domains/kasrasystem.ir/public_html/admin/admin-panel.php on line 9 Warning: session_start(): Cannot send session cache limiter – headers already sent (output started at /home2/chaaboki/domains/kasrasystem.ir/public_html/admin/admin-panel.php:8) in /home2/chaaboki/domains/kasrasystem.ir/public_html/admin/admin-panel.php on line 9 Warning: Cannot modify header information – headers already sent by (output started at /home2/chaaboki/domains/kasrasystem.ir/public_html/admin/admin-panel.php:8) in /home2/chaaboki/domains/kasrasystem.ir/public_html/admin/admin-panel.php on line 11
فکر میکنین مشکل از کجاست؟فقط این نکته رو ذکر کنم که بعد از وارد کردن نام کاربری و کلمه عبور به یک صفحه دیگه که صفحه اصلی پنل مدیریت هست وارد میشم که در این صفحه من یک session قراردادم که اگر صحیح بود اجازه لاگین میده.
کد پی اچ پی که در صفحه پنل مدیریت قرار دادم هم به شرح زیر هست:

ممنون میشم راهنمایی بفرمائید.

لقمان آوند

این مشکل رو در دوره به وضوح گفتیم که دلیلش چیه!
قبل از باز کردن سشن هیچ خروجی نباید وجود داشته باشه. اینو تو کدتون چک کنید …
ویدیوهای دوره رو با دقت ببینید.

mostafash

با سلام
من مورد رو چک کردم و قبل از session_start هیچ کدی وجود ندارد.جالب اینجاست که توی لوکال هاست هیچ مشکلی نداره ولی وقتی آپلود می کنم توی هاست اصلی،اونجاست که داره به من ارور فوق رو میده.به نظر شما مشکل میتونه از تنظیمات هاست اصلی من باشه؟
ممنون

لقمان آوند

پس انکودینگ فایل رو حتما چک کنید که utf8 without bom باشه
اگر درست نشد آدرس و اطلاعات ورود به هاستتون رو برام ایمیل کنید که بررسی کنم براتون

mostafash

سلام.اطلاعات هاست رو از طریق پنل کاربریم برای شما ارسال کردم.ممنون میشم بررسی بفرمائید

mostafash

جناب دکتر آوند سلام.با عرض شرمندگی مشکل ورود به پنل سایت منو وقت کردین بررسی کنین

لقمان آوند

سلام
از اینجا بازیابی کنید .

رضا replyپاسخ

سلام خسته نباشید
میشه در مورد remember me بیشتر توضیح بدین گه چجوری بنویسیم؟ ممنون

لقمان آوند

توضیحات رو تقریبا تو ویدیو دادیم. عبارت how to implement remember me in php رو گوگل کنید. مقالاتی پیدا می کنید که روش انجام اینکارو آموزش دادند.

mahii replyپاسخ

سلام، فایل های این قسمت رو نمیتونم دانلود کنم، ارور میده، لطفا اصلاح کنید

وحید صالحی

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

mehdi eslami replyپاسخ

سلام چرا این قسمت از اموزش رو نمیتونم دانلود کنم؟
ظاهرا لینکش خرابه لطفا بررسی کنید ممنونم.

لقمان آوند

مشکلی نداره
مجددا چک کنید

mehdi karimi replyپاسخ

سلام ، استاد کوکی هایی که من ست میکنم و براشون تاریخ انقضا تعیین میکنم تو همه مرورگر ها درست عمل میکنه و بعد از پایان تاریخ انقضا از بین میرن ولی تو فایرفاکس اینجوری نیست و بعد از تاریخ انقضا هم باقی میمونن ، جستجو هم کردم به نتیجه ای نرسیدم ، نمیدونم چه جوریه داستان اگه میشه راهنمایی کنید

لقمان آوند

ممکنه فقط نگه داره. ولی خوب قابل استفاده و فعال نیست چون منقضی شده .

Sahar Dida replyپاسخ

سلام خسته نباشید
در توابعی که در فایل auth.php نوشتید return false و return true را برای چی گذاشتین؟
اگه return نگذاریم چه می شود چون این بعضی از این توابع قرار نیست چیزی را برگدانند

لقمان آوند

بعضی وقتا لازمه مقدار برگشتی تابع رو بگیرید و بررسی کنید که آیا موفقیت آمیز بوده یا نه. مثلا توی شرط if
برای همین مقادیر مذکور return میشه

eli yat replyپاسخ

با سلام و وقت بخیر

اگر بخوایم برای مدیر که لاگین کرده بتونه از تو پنل مدیریتش بدون خارج شدن ، بتونه پنل کاربراش و ببینه .
و این در حالیه که برای نمایش صفحه کاربران با توجه به سشن id شون و سشن type شون نمایش داده میشه .
چه طوری سشن ها رو تنظیم کنم که با سشن مدیر که الان لاگین هست ، پنل کاربران را نمایش بدم .

بسیار بسیار ممنون میشم اگر راهنمایی بفرمایین .

لقمان آوند

برای اینکه اطلاعات کاربرای دیگه رو ببینید لزوما نیازی به ست کردم سشم مجدد نیست. کافیه آیدی کاربر رو بدید و اطلاعاتش رو بگیرید و به مدیر نمایش بدید .

محمدرضا replyپاسخ

سلام وقتون بخیر
روشی که استفاده کردین برای انتقال اطلاعات بین صفحات وب از طریق URL بهش میگن Query String ؟
من دوست دارم مسلط بشم به این مبحث ممنون میشم اگه منابع فارسی و انگلیسی جالب رو معرفی کنید یا اینکه شماره جلسه ای که داخلش این موارد رو توضیح دادین بگید
ممنونم ازتون و خسته نباشید عاقبتون بخیر

کیوان علی محمدی

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

محمدامین عطائی replyپاسخ

بعد از دیدن این قسمت خیلی اعصابم به هم ریخت . یک سری کد هستن که همش کپی پیست میشن. بعد استاد میگن برین خودتون مطالعه کنین که توی این کدها چه اتفاقی افتاده. خوب این کدهای آماده که تو اینترنت هست. من لازم دارم یکی برام توضیخشون بده . اگه میخواستم همینجوری بخونیم خودمون کد رو که دیگ دوره ی ویدئویی تهیه نمیکردیم

ارسال نظرات

کاربر گرامی، امکان ارسال نظر و پشتیبانی برای دوره های مجازی فقط برای دانشجویان این دوره امکان پذیر می باشد.