زنگ

کسانی هستند که این خبر را قبل از شما می خوانند.
برای دریافت آخرین مقالات مشترک شوید.
پست الکترونیک
نام
نام خانوادگی
چگونه می خواهید The Bell را بخوانید
بدون اسپم

فناوری جلسه در PHP هستند به روشی ساده ذخیره اطلاعات برای یک کاربر واحد سایت. به عنوان مثال: محصولات اضافه شده به سبد فروشگاه ، تنظیمات اطلاع رسانی و غیره. در اولین درخواست سایت به سرور ، یک کوکی بی نظیر در مرورگر ذخیره می شود شناسه جلسه کاربر. شناسه یا ارتباط شناسه با آدرس IP ، سپس کاربر را مشخص می کند. این می تواند مورد استفاده قرار گیرد تا در بین درخواست های صفحه ادامه یابد. شناسه جلسه معمولاً از طریق کوکی جلسه به مرورگر ارسال می شود و برای بازیابی داده های جلسه موجود استفاده می شود.

استفاده از جلسات فناوری ساده: PHP یا با استفاده از شناسه گذشت (معمولاً از یک جلسه) داده ها را از یک جلسه موجود دریافت می کند کوکی) ، یا اگر چیزی منتقل نشد ، جلسه جدید ایجاد می شود. پس از شروع جلسه ، PHP سطح جهانی $ _SESSION را با اطلاعات جلسه جمع می کند. هنگامی که PHP خارج می شود ، به طور خودکار محتویات superglobal $ _SESSION را سریال می کند و برای ضبط جلسه ، آن را برای ذخیره با استفاده از یک جلسه گیرنده ارسال می کند.

PHP بصورت پیش فرض از یک هندلر داخلی استفاده می کند فایل ها برای صرفه جویی در جلسات ، که در متغیر session.save_handler INI تنظیم شده است. این کنترل کننده داده ها را در سرور موجود در دایرکتوری مشخص شده در جلسه تنظیمات session.save_path ذخیره می کند.

ساده ترین مثال استفاده از یک جلسه ، برای مثال نمایش تعداد بازدیدهای صفحه برای هر کاربر:

انسداد جلسه چگونه ممکن است؟

در وب سایت php در بخش توضیحات جلسه یک یادداشت وجود دارد (http://php.net/manual/ru/session.examples.basic.php):

جلسات با استفاده از پرونده ها (به طور پیش فرض در PHP) ، بلافاصله پس از باز کردن جلسه با عملکرد session_start () یا به طور غیرمستقیم هنگام مشخص کردن session.auto_start ، پرونده جلسه را مسدود کنید. پس از قفل شدن ، هیچ اسکریپت دیگری نمی تواند به همان جلسه جلسه دسترسی داشته باشد تا اینکه بسته شود یا اینکه اسکریپت به پایان برسد یا اینکه عملکرد session_write_close () فراخوانی شود.

به احتمال زیاد این مسئله برای سایتهایی که به طور فعال از آنها استفاده می کنند به مشکل تبدیل می شود آژاکس و چندین درخواست همزمان کنید. آسانترین راه حل این مشکل فراخوانی تابع session_write_close () است به محض اینکه تمام تغییرات لازم در جلسه انجام شد ، ترجیحا به شروع فیلمنامه نزدیکتر شوید. همچنین می توانید از مکانیزم جلسه دیگری استفاده کنید که از همزمانی حمایت کند.

اخیراً مشکل مسدود کردن جلسات شایع تر شده است. این تا حدودی به دلیل عارضه سایتها و لزوم انجام محاسبات بیشتر در سمت سرور و همچنین توزیع بیشتر است. آژاکس... متأسفانه ، منطق کاربرد ، به ویژه اگر پیچیده باشد ، همیشه زمان انسداد فرآیندهای رقابت برای یک جلسه را به طور موثری محدود نمی کند. اوضاع از آنجا تشدید می شود که 3-5 چنین مشتریانی قادر به سرعت کارگران PHP را با فرآیندهای منجمد و بیکار مهار می کنند ، در نتیجه سایت شروع به صدور می کند خطای 5XX .

ساده ترین نمونه جلسات مسدود کردن:

// فقط برای یک فیلمنامه ?>

اگر این پرونده را ابتدا در اولین برگه باز کنید ، و سپس در برگه دوم ، برگه دوم منتظر خواهد بود تا اولین آن تمام شود. یعنی در واقع ، برگه دوم صبر خواهد کرد تا اولین نسخه پرونده جلسه را منتشر کند (که در این حالت خاص 30 ثانیه طول می کشد). این مشکل به خوبی در وبلاگ شرکت توضیح داده شده است 1C-Bitrix در حبرابر.

چه گزینه هایی برای حل این مشکل وجود دارد

برای ذخیره جلسات می توانید از بانکهای اطلاعاتی مانند MySQL یا PostgreSQL (که با توجه به قابلیت های اکثر پایگاه های داده و سرعت کار در آن کاملاً صحیح نیست این وظیفه), بهم پیوست (ذخیره جلسه را تضمین نمی کند ، ممکن است حذف شود) و ردیسکه ما اعتقاد داریم ذخیره سازی بهینه... از نظر سرعت ، از Memcached فرومایه نیست ، اما در عین حال می تواند ایمنی داده ها را تضمین کند.

و مهمترین مزیت ردیس - هنگام ذخیره جلسات در آن ، آنها مسدود نمی شوند.

در کنترل پنل () ما می توانید فضای ذخیره جلسه در Redis را برای همه سایتهای موجود در حساب خود فعال کنید. برای این کار ، به " وب سایتها"، و سپس کادر را علامت بزنید -" ذخیره جلسات کلیه سایتها در Redis".

مواد اضافی

بخش ها

SSH

FTP

برنامه های وب

  • بررسی اجمالی نصب برنامه (محیط مجازی داکر)

تشخیص مشکلات

دامنه ها

  • لغو نام دامنه در منطقه .RU / .РФ که ثبت کننده آن Beget برای آن است
  • انتقال حقوق مربوط به نام دامنه .RU / .РФ / .SU و مناطق بین المللی (تغییر مدیر دامنه)

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

بیایید با اضافه کردن فیلدها به جدول شروع کنیم « کاربران» ... ما به یک فیلد برای ذخیره آدرس ایمیل ، فیلدی برای وضعیت کاربر (0 - غیرفعال ، 1 - فعال) و یک فیلد با تاریخ ثبت احتیاج داریم.





سپس باید ترفند کنید save_user.phpبا افزودن چک برای صحت آدرس ایمیل و ارسال نامه ای جهت تأیید ثبت نام. نامه حاوی پیوندی با دو متغیر است که به روش get منتقل شده است : ورود و تولید ، منحصر به فرد برای هر کاربر ، کد. ما به کد نیاز داریم تا کاربر نتواند حساب خود را بدون نامه فعال کند و این اطمینان را به ما می دهد که آدرس ایمیل وارد شده واقعاً به او تعلق دارد. بعد از استخراج داده های ارسالی از متغیرهای جهانی کد زیر را اضافه کنید:

اگر (صادرکننده ($ _ POST ["ایمیل"])) ($ email \u003d $ _POST ["ایمیل"]؛
اگر (خالی (ورود به سیستم $) یا خالی (رمز عبور $) یا خالی (کد $) یا خالی ($ ایمیل))
// اضافه کردن یک متغیر باه- نامهنشانی
// اگر کاربر نام کاربری یا رمز ورود خود را وارد نکرد ، ما خطایی را صادر می کنیم و اسکریپت را متوقف می کنیم
{
خروج ("شما تمام اطلاعات را وارد نکردید ، برگردید و همه قسمتها را پر کنید!")؛ // اجرای اسکریپت ها را متوقف کنید
}
اگر (! preg_match ("/ [ایمیل محافظت شده]+ \\. (2،3) / i "، ایمیل $)) // آدرس ایمیل را بررسی کنید عبارات با قاعده برای صحت
(خروج ("نامه الکترونیکی نامعتبر وارد شد!")))

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

// اگر نه ، سپس داده را ذخیره کنید
$ result2 \u003d mysql_query ("وارد کاربران شوید (ورود ، گذرواژه ، نماد ، ایمیل ، تاریخ) VALUES (" $ ورود "،" رمز عبور $ "،" $ avatar "،" ایمیل $ "، اکنون ()))؛
// بررسی کنید که آیا خطایی وجود دارد یا خیر
if ($ result2 \u003d\u003d "TRUE")
{
$ result3 \u003d mysql_query ("انتخاب شناسه از کاربران WHERE login \u003d" $ login "" ، db $) ؛ // شناسه کاربر را بازیابی کنید. با تشکر از او ، ما یک کد فعال سازی منحصر به فرد خواهیم داشت ، زیرا نمی توان دو شناسه یکسان داشت.
$ myrow3 \u003d mysql_fetch_array (result3 $)؛
$ activation \u003d md5 ($ myrow3 ["id"]) .md5 ($ ورود)؛ // کدفعال سازیحساب. بگذارید شناسه را رمزگذاری کنیم و از طریق عملکرد md5 وارد شوید. بعید است که کاربر بتواند چنین ترکیبی را به صورت دستی از طریق نوار آدرس انتخاب کند.
$ subject \u003d "تأیید ثبت نام"؛ //موضوع پیام
$ پیام \u003d "سلام! با تشکر از شما برای ثبت نام در citename.ru \\ n ورود شما:". $ وارد شوید. "\\ n
برای فعال کردن حساب خود پیوند را دنبال کنید: \\ nhttp: //localhost/test3/activation.php؟ ورود \u003d ". $ ورود." & Code \u003d ". $ activation." \\ N با احترام ، \\ n
Administrator citename.ru "؛ // محتوای پیام
نامه (ایمیل $ ، موضوع $ ، پیام $ ، "نوع محتوا: متن / هواپیما ؛ Charset \u003d windows-1251 \\ r \\ n")؛ // ارسال یک پیام

اکو "نامه ای برای تأیید ثبت نام برای شما ارسال شده است. توجه! این لینک به مدت 1 ساعت معتبر است. صفحه اصلی"؛ // صحبت در مورد ایمیل ارسال شده به کاربر
}

پیغام فرستاده شد! اکنون کاربر آن را باز کرده و پیوند مشخص شده به صفحه را که کد فعال سازی را بررسی می کند ، دنبال می کند. پس از اطمینان از صحت کد ، ثبت را با تغییر مقدار فیلد در دیتابیس تأیید می کنیم فعال سازی از "0" به "1".

ایجاد پرونده activation.php

شامل ("bd.php")؛ // فایلbd. پی اچ پی باید در همان پوشه مانند همه افراد باشد ، اگر اینگونه نیست که فقط مسیر را تغییر دهید
$ result4 \u003d mysql_query ("SELECT avatar از کاربران WHERE activation \u003d" 0 "AND UNIX_TIMESTAMP () - UNIX_TIMESTAMP (تاریخ)\u003e 3600") ؛ // بازیابی آواتارهای کاربرانی که ظرف یک ساعت حساب خود را فعال نکرده اند. بنابراین ، آنها باید از پایگاه داده و همچنین پرونده های آواتارهای آنها حذف شوند
if (mysql_num_rows (نتیجه 4 $)\u003e 0) (
$ myrow4 \u003d mysql_fetch_array (result4 $)؛
انجام دادن
{
// اگر استاندارد نیستند ، آواتارها را در یک حلقه حذف کنید
if ($ myrow4 ["avatar"] \u003d\u003d "آواتار / net-avatara.jpg") ($ a \u003d "کاری نکن"؛)
دیگری (
uninkink ($ myrow4 ["نماد"])؛ // پرونده را حذف کنید
}
}
در حالی که ($ myrow4 \u003d mysql_fetch_array (نتیجه 4 $))؛
}
mysql_query ("DELETE از کاربران WHERE activation \u003d" 0 "AND UNIX_TIMESTAMP () - UNIX_TIMESTAMP (تاریخ)\u003e 3600")؛ // حذف کاربران از پایگاه داده
if (صادرکننده ($ _ GET ["کد"])) (کد $ \u003d $ _ دریافت ["کد"]؛) //کد تایید
دیگر
(خروج ("شما بدون کد تأیید وارد صفحه شدید!"))) // اگر مشخص نشده باشدکد، سپس ما یک خطا می دهیم
if (isset ($ _ GET ["ورود"])) ($ log \u003d $ _ GET ["ورود"]؛) // ورود به سیستم برای فعال کردن
دیگر
(خروج ("شما بدون ورود به صفحه وارد شدید!"))) // اگر ورود به سیستم را مشخص نکرده اید ، خطایی را صادر می کنیم
$ result \u003d mysql_query ("انتخاب شناسه از کاربران که در آن ورود به سیستم \u003d" $ ورود "" ، db $)؛ // با استفاده از شناسه کاربری ، شناسه کاربری را بازیابی کنید
$ activation \u003d md5 ($ myrow ["id"]). md5 ($ ورود)؛ // ایجاد همان کد تأیید
if (فعال سازی $ \u003d\u003d کد کد) ( // مقایسه به دست آمده ازآدرس و کد تولید شده
mysql_query ("به روز رسانی کاربران تنظیم فعال سازی \u003d" 1 "در اینجا ورود به سیستم \u003d" $ ورود "" ، db $)؛ // اگر برابر باشد ، کاربر را فعال کنید
echo "نامه شما تأیید شده است! اکنون می توانید با استفاده از نام کاربری خود وارد سایت شوید! صفحه اصلی"؛
}
دیگری (تکرار "خطا! ایمیل شما تأیید نشده است! صفحه اصلی")؛
// اگر از بدست آمده باشدآدرس و کد تولید شده برابر نیست ، بنابراین ما خطایی می دهیم
}
?>

آدرس پست الکترونیکی تأیید شده است ، اکنون می دانیم که این آدرس به آن تعلق دارد این کاربردر صورت فراموش کردن کاربر یا سایر اعلان ها ، می توان یک رمز عبور برای آن ارسال کرد. اما تفاوت بین کاربران فعال و غیر فعال چیست؟ هر دوی آنها می توانند وارد سایت شوند ، بنابراین ، باید دسترسی کسانی که فعال نشده اند را محدود کنیم. بیایید پرونده را باز کنیم تستر. پی اچ پی و یک شرط دیگر در پرس و جو به پایگاه داده اضافه کنید:

$ result \u003d mysql_query ("SELECT * از کاربران که در آن ورود به سیستم \u003d" $ ورود "و رمزعبور \u003d" $ رمز عبور "و فعال سازی \u003d" 1 "" ، دلار db)؛ // بازیابی اطلاعات از داده های مربوط به کاربر با ورود به سیستم
// ما اضافه کردیم "وفعال سازی\u003d "1" "، یعنی کاربر فقط در بین فعالین جستجو می شود. توصیه می شود برای داده های کاربر این شرط را به سایر چک های مشابه اضافه کنید.

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

ورود خودکار






هم اکنون ثبت نام کنید


رمز ورود خود را فراموش کرده اید؟

یک پیوند وجود دارد ، اما هیچ پرونده ای نیست. بیا بنویسیم ارسال_ عبور. پی اچ پی... در آن از کاربر برای ورود و آدرس ایمیل آنها سؤال خواهیم کرد. اگر نامه الکترونیکی و ورود وارد شده در دیتابیس باشد ، ما برای آن ارسال خواهیم کرد رمز عبور جدیداگر کاربر قدیمی را فراموش کرده است ، زیرا ما هنگام ثبت نام اطمینان دادیم که آدرس ایمیل معتبر است.

if (isset ($ _ POST ["login"])) ($ login \u003d $ _POST ["ورود"]؛ if ($ login \u003d\u003d "") (تنظیم نشده ($ ورود)؛)) // ورود به سیستم وارد شده توسط کاربر را وارد متغیر ورود به سیستم کنید ، اگر خالی باشد ، متغیر را نابود کنید
if (صادرکننده ($ _ POST ["ایمیل"])) ($ email \u003d $ _POST ["ایمیل"]؛ if ($ email \u003d\u003d "") (تنظیم نشده (ایمیل)))) // در صورت خالی بودن ، نامه الکترونیکی وارد شده توسط کاربر را وارد کنید ، سپس متغیر را نابود کنید
if (صادر کننده (ورود به سایت $) و صادر کننده (ایمیل)) ( // در صورت وجود متغیرهای مورد نیاز

شامل ("bd.php")؛

$ result \u003d mysql_query ("انتخاب شناسه از کاربران که در آن ورود به سیستم \u003d" $ ورود "و ایمیل \u003d" $ email "و فعال سازی \u003d" 1 "" ، db $)؛ // چنینچهدرکاربره- نامه
$ myrow \u003d mysql_fetch_array (نتیجه $)؛
if (خالی ($ myrow ["id"]) یا $ myrow ["id"] \u003d\u003d "") (
// در صورت عدم وجود کاربر فعال با این ورود و آدرس ایمیل
derket ("هیچ کاربر با این آدرس ایمیل در هیچ پایگاه داده CIA یافت نشد. صفحه اصلی")؛
}
// اگر یک کاربر با چنین نام کاربری و نامه الکترونیکی پیدا شد ، باید یک رمز عبور تصادفی برای وی تولید کنید ، آن را در بانک اطلاعات به روز کنید و به ایمیل ارسال کنید
$ datenow \u003d تاریخ ("YmdHis")؛ // واگذاری تاریخ
$ new_password \u003d md5 ($ datenow)؛ // تاریخ را رمزگذاری کنید
$ new_password \u003d substr ($ new_password ، 2 ، 6)؛ // استخراج 6 کاراکتر از رمز ، از دوم شروع کنید. این رمز عبور تصادفی ما خواهد بود. در مرحله بعد ، ما آن را به پایگاه داده می نویسیم ، و آن را طبق معمول رمزگذاری می كنیم.

$ new_password_sh \u003d strrev (md5 ($ new_password)). "b3p6f"؛ // رمزگذاری شده
mysql_query ("به روز رسانی کاربران تنظیم گذرواژه \u003d" $ new_password_sh "WHERE login \u003d" $ login "" ، db $)؛ // به روز شدهکه درپایه
// تشکیل پیام

$ message \u003d "سلام" ، $ login. "! ما یک رمز ورود برای شما ایجاد کردیم ، اکنون می توانید با استفاده از آن وارد سایت citename.ru شوید. پس از وارد کردن ، توصیه می شود آن را تغییر دهید. // متن پیام
نامه (نامه الکترونیکی $ ، "بازیابی رمز عبور" ، پیام $ ، "نوع محتوا: متن / هواپیما ؛ Charset \u003d windows-1251 \\ r \\ n")؛ // ارسالپیام

اکو " نامه ای با رمز عبور برای نامه الکترونیکی شما ارسال شده است. بعد از 5 ثانیه منتقل می شوید. اگر نمی خواهید صبر کنید ، لطفا اینجا را کلیک کنید. "؛ // تغییر مسیر کاربر
}
دیگری ( // اگر هنوز هیچ داده ای وارد نشده است
پژواک "


رمز ورود خود را فراموش کرده اید؟


رمز ورود خود را فراموش کرده اید؟



ورود به سیستم خود را وارد کنید:



نامه الکترونیکی خود را وارد کنید:






";
}
?>

در مرحله بعد ، ما به صورت اتوماتیک وارد می شویم. اینگونه کار خواهد کرد: پس از ورود به سیستم با موفقیت در کادر انتخاب ، دکمه خودکار "بله" در کوکی وارد می شود. اگر سرور آن خودکار \u003d "بله" را در مرورگر ببیند ، جلسه ای را آغاز می کند و متغیرها را در آن می کشد ، در کوکی. سپس جلسات در حال اجرا بر علیه پایگاه داده بررسی می شود.

بیایید باز کنیم تستر. پی اچ پی و کد را بعد از ورود موفقیت آمیز اضافه کنید:

اگر (صادر ($ _ POST ["ذخیره"])) (
// اگر کاربر بخواهد داده های خود را برای ورود بعدی ذخیره کند ، ما آنرا در کوکی های مرورگر خود ذخیره می کنیم

setcookie ("id" ، $ myrow ["id"] ، زمان () + 9999999)؛)
if (صادر ($ _ POST ["autovhod"])) (
// اگر کاربر بخواهد به طور خودکار وارد سایت شود
setcookie ("خودکار" ، "بله" ، زمان () + 9999999)؛
setcookie ("ورود به سیستم" ، $ _POST ["ورود"] ، زمان () + 9999999)؛
setcookie ("رمز عبور" ، $ _POST ["رمز عبور"] ، زمان () + 9999999)؛
setcookie ("id" ، $ myrow ["id"] ، زمان () + 9999999)؛)

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

// کل روش در جلسات کار می کند. در آن است که داده های کاربر در حین حضور در سایت ذخیره می شود. اجرای آنها در همان ابتدای صفحه بسیار مهم است !!!
session_start ()؛
شامل ("bd.php")؛ // فایل bd.php باید در همان پوشه مانند همه افراد باشد ، اگر اینگونه نباشد ، فقط کافیست مسیر را تغییر دهید
اگر (صادر ($ _ COOKIE ["خودکار"]) و صادر ($ _ COOKIE ["ورود"]) و صادر شوید ($ _ COOKIE ["رمز عبور"]))
{// در صورت وجود متغیرهای مورد نیاز
if ($ _COOKIE ["خودکار"] \u003d\u003d "بله") ( // اگر کاربر می خواهد به طور خودکار وارد سیستم شود ، سپس جلسات را شروع کنید
$ _SESSION ["پسورد"] \u003d strrev (md5 ($ _ COOKIE ["رمز عبور"])). "B3p6f"؛ // در کوکی ها رمز عبور رمزگذاری نشده بود ، اما در جلسات معمولاً رمزگذاری می شود
$ _SESSION ["login"] \u003d $ _ COOKIE ["ورود"]؛ // جلسهاز جانبوارد شدن
$ _SESSION ["id"] \u003d $ _ COOKIE ["id"]؛ //شناسه کاربر
}
}

حال حتی خروج نیز به ما کمک نمی کند تا کاربر را تغییر دهیم! که در خروج. پی اچ پی جلسات حذف شده اند ، که هنوز هم ایجاد می شوند فهرست مطالب. پی اچ پیبا تشکر از کوکی ها که برای مدت زمان بسیار طولانی ذخیره می شوند! بیایید به هر حال پرونده را تعمیر کنیم خروج. پی اچ پیدر غیر اینصورت در صورت ورود اتوماتیک عملکردی ندارد. شما فقط باید بعد از خارج کردن متغیرها از جلسه ، ورود خودکار را در کوکی پاک کنید:

Setcookie ("خودکار" ، "" ، زمان () + 9999999)؛ // ورود خودکار پاک کنید

همچنین لازم است به آن اضافه شود به روز رسانی_ کاربر. پی اچ پی بعد از به روزرسانی ورود به جلسه:

$ _SESSION ["ورود به سیستم"] \u003d $ ورود؛ // ورود به جلسه را در جلسه به روز کنید
if (صادر ($ _ COOKIE ["ورود"])) (
setcookie ("ورود" ، $ ورود ، زمان () + 9999999)؛ // در حال بروز رسانیوارد شدنکه درکلوچه ها
}

و همین کار را با رمز انجام دهید

$ result4 \u003d mysql_query ("به روز رسانی کاربران تنظیم گذرواژه \u003d" $ رمز عبور "WHERE login \u003d" $ old_login "" ، db $)؛ // به روز رسانیکلمه عبور
if ($ result4 \u003d\u003d "TRUE") ( // در صورت صحت ، آن را در جلسه به روز کنید
$ _SESSION ["پسورد"] \u003d $ رمزعبور؛
if (صادرکننده ($ _ COOKIE ["گذرواژه"])) (
setcookie ("رمز عبور" ، $ _ POST ["رمز عبور"] ، زمان () + 9999999)؛ // در حال بروز رسانیکلمه عبورکه درکلوچه ها, اگر یکآنهاوجود دارد
}

خودشه. امیدوارم موفق شوید! موفق باشید!

جلسات مکانیسمی است که به شما امکان می دهد داده های خاصی را روی سرور ذخیره کنید ، برای هر کاربر بی نظیر است. به ویژه خوانندگان توجه شباهت هایی با آن پیدا می کنند کوکی... و ، به طور کلی ، آنها یک و یکسان هستند. با این حال ، نکته اصلی: داده ها در مرورگر کاربر ذخیره نمی شوند بلکه در یک فایل خاص روی سرور ذخیره می شوندنام آن برای هر کاربر بی نظیر است. منحصر به فرد شناسه جلسه PHP در حال حاضر در کوکی.

بیا با شما بریم بیایید با جلسات در PHP کار کنیم... و اجازه دهید با شروع session_start () توابع... این عملکرد زیر را انجام می دهد: اگر کاربر برای اولین بار وارد سیستم شوید ، یک شناسه منحصر به فرد ایجاد می کند و آن را برای آن می نویسد کوکیو همچنین یک پرونده جدید ایجاد می کند که مجدداً برای کاربر بی نظیر است. اگر کاربر قبلاً وارد سیستم شده باشد ، سپس سرور مقدار شناسه منحصر به فرد را از آن می خواند کوکی و مطابق با آن ، به پرونده جلسه موردنیاز دسترسی پیدا می کند. از این پرونده PHP تمام داده ها را می خواند و آنرا در آرایه قرار می دهد $ _SESSION... بگذارید یک کد ساده بنویسیم که در آن یک متغیر را برای جلسه بنویسیم ، یا اگر قبلاً نوشته شده است آن را بخوانیم.

session_start ()؛
if (صادر ($ _ SESSION ["نام"])) $ name \u003d $ _SESSION ["name"]؛
other $ _SESSION ["name"] \u003d "15St"؛
نام echo $؛
?>

اول تماس می گیریم عملکرد session_start ()که در بالا توضیح دادم. سپس بررسی می کنیم که آیا متغیر وجود دارد " نام"در جلسه. اگر وجود داشته باشد ، پس داده ها را از آن می خوانیم و آن را برای متغیر می نویسیم نام... اگر وجود ندارد (یعنی کاربر برای اولین بار آمد) ، سپس متغیر را تنظیم کنید " نام"در مقدار جلسه" 15St"خط بعدی مقدار متغیر را نشان می دهد نام $... بدیهی است ، اولین باری که شروع می کنید ، یک خط خالی مشاهده خواهید کرد ، اما دوم خط را مشاهده خواهید کرد " 15St"از جلسه بخوانید.

من به شما توصیه می کنم اکنون وارد نوار آدرس شوید: " javascript: document.cookie"(در همان برگه ای که اسکریپت را اجرا کرده اید وارد کنید. در نتیجه ، چیزی شبیه به موارد زیر را مشاهده خواهید کرد:" PHPSESSID \u003d"فقط معنی PHPSESSID و بنابراین یک شناسه منحصر به فرد است

و برای روشن ساختن همه چیز ، به شما توصیه می کنم حتی پیدا کنید پرونده جلسه... اگر استفاده می کنید منکر، سپس در پوشه قرار دارد " tMP". به پرونده های شروع شده با" sess_"- اینها بسیارند پرونده های جلسه... می توانید آنها را در یک یادداشت ساده باز کنید.

یکی دیگر از ویژگی های بسیار مهم است زمان بندی جلسات در PHP... پس اگر کوکی تا زمانی که توسط مرورگر حذف نشود ، ذخیره می شود. و مرورگر هرگز آنها را به طور پیش فرض حذف نمی کند. آن جلسه در زمان مشخص شده در ذخیره می شود تنظیمات PHP... به طور پیش فرض ، اینگونه است 15 دقایق. یعنی اگر استفاده کنید احراز هویت مبتنی بر جلسهبعد از 15 دقیقه عدم تحرک کاربر ، مجبور است دوباره وارد سیستم شود. البته ، این خوب است ، زیرا اگر کاربر فراموش کند " خروج"، بنابراین هیچ چیز بدی رخ نخواهد داد. یک مهاجم قادر به استفاده از حساب کاربری نخواهد بود. علاوه بر این ، اگر استفاده از کوکی ها آنها می توانند به سرقت بروند ، در مرورگر شما جایگزین شوند ، و در نتیجه ، مهاجم تحت اطلاعات شخص دیگری مجاز است ، بدون اینکه حتی رمز عبور را بداند. و شما نمی توانید جلسه را به سرقت برده ، زیرا همه پارامترها روی سرور ذخیره می شوند ، و نمی توانید از آنها اطلاعات کسب کنید.

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

و در آخر ، من می خواهم درباره خیلی هشدار بدهم یک اشتباه رایج... هرگز داده ها را قبل از مرورگرها صادر نکنید با استفاده از تابع session_start ()در غیر این صورت خطایی به وجود می آورد. یعنی شما نمی توانید اینگونه بنویسید:

پژواک "سلام"؛
session_start ()؛
?>

هنگام اجرای این اسکریپت خطایی روی می دهد. با همین قانون معتبر بود کوکی (تابع setcookie ()) بنابراین فکر می کنم اینجا همه چیز روشن است.

با توجه به جلسات در PHP، پس ، البته ، آنها می توانند برای ذخیره داده ها در مورد آمار ، تأیید اعتبار ، تنظیمات شخصی کاربر و سایر موارد مشابه استفاده شوند.

ما یاد خواهیم گرفت که احراز هویت ساده کاربر را در سایت انجام دهیم. این سایت فقط می تواند دارای صفحات برای کاربران مجاز باشد و در صورت اضافه کردن اعتبار احراز هویت به آنها ، آنها کاملاً کار می کنند. برای ایجاد آن ، به یک پایگاه داده MySQL نیاز دارید. اگر می خواهید اطلاعات کاربر اضافه کنید ، می تواند 5 ستون (حداقل) یا بیشتر داشته باشد. بیایید پایگاه داده را "Userauth" بنامیم.

بیایید زمینه های زیر را در آن ایجاد کنیم: شناسه برای شمارش تعداد کاربران ، UID برای شماره شناسایی منحصر به فرد کاربر ، نام کاربری برای نام کاربری ، ایمیل برای آدرس وی پست الکترونیک و رمز عبور می توانید از پایگاه داده موجود برای مجوز کاربر استفاده کنید ، دقیقاً مانند مورد بانک اطلاعاتی ، جدول زیر را در آن ایجاد کنید.

کد MySQL

ایجاد جدول "کاربران" ("ID" int (11) NULL AUTO_INCREMENT ، "UID" int (11) NULL ، `نام کاربری" متن NULL ، متن "پست الکترونیکی" NULL ، متن "رمز عبور" NULL ، کلید اصلی) (`ID`)) ENGINE \u003d MyISAM DEFAULT CHARSET \u003d utf8 AUTO_INCREMENT \u003d 1؛

حال بیایید پرونده "sql.php" ایجاد کنیم. وی مسئول اتصال به دیتابیس است. این کد ابتدا با اتصال به سرور ، متغیرهایی را برای سرور و کاربر ایجاد می کند. دوم ، این پایگاه داده را انتخاب می کند ، در این حالت "USERAUTH". برای دسترسی به پایگاه داده ، این پرونده باید به "log.php" و "reg.php" وصل شود.

کد PHP

// نام کاربری MySQL شما $ pass \u003d "تغییر مسیر"؛ // رمزعبور $ conn \u003d mysql_connect (سرور $ ، کاربر کاربر ، $ pass)؛ // اتصال به سرور $ db \u003d mysql_select_db ("userauth" ، $ conn)؛ // پایگاه داده را انتخاب کنید اگر (! دلار db) ( // در صورت عدم امکان انتخاب بانک اطلاعاتی echo "متأسفیم ، خطا: (/\u003e"؛ // پیام خطا را نشان می دهد خروج () // اجازه می دهد اسکریپت های دیگر PHP کار کنند } ?>

بعد صفحه ورود به سیستم است ، بیایید آنرا "login.php" بنامیم. ابتدا داده های وارد شده را برای خطا بررسی می کند. این صفحه دارای زمینه هایی برای نام کاربری ، رمز عبور ، دکمه ارسال و پیوند ثبت نام است. هنگامی که کاربر دکمه "ورود" را کلیک می کند ، فرم توسط کد "پرونده" log.php "پردازش می شود و سپس سیستم وارد سیستم می شود.

کد PHP

0) { // در صورت وجود خطاهای جلسه $ err \u003d "

"؛ // پیش نمایش جدول را شروع کنید ($ _SESSION [" ERRMSG "] به عنوان $ msg) (" // هر خطا را تشخیص دهید $ err. \u003d " "; // آن را به یک متغیر بنویسید ) $ err. \u003d "
". $ msg."
"; // جدول را ببندید تنظیم نشده است ($ _SESSION ["ERRMSG"])؛ // حذف جلسه } ?> فرم ورود
نام کاربری
کلمه عبور
ورود به سیستم

سپس یک اسکریپت می نویسیم تا وارد سیستم شویم. بیایید آنرا "log.php" بنامیم. این تابع برای پاک کردن داده های ورودی از تزریق SQL است که می تواند اسکریپت شما را خراب کند. دوم ، داده فرم را دریافت می کند و اعتبار آن را تأیید می کند. اگر ورودی صحیح باشد ، اسکریپت کاربر را به صفحه کاربران مجاز ارسال می کند ، در غیر این صورت ، خطایی را ایجاد کرده و کاربر را به صفحه ورود ارسال می کند.

کد PHP

// شروع جلسه برای ضبط تابع Fix ($ str) (// پاک کردن زمینه های $ str \u003d برش ($ str) ؛ اگر (get_magic_quotes_gpc ())) ($ str \u003d نوارپشت ها ($ $)؛) // آرایه برای ذخیره خطاها $ errflag \u003d نادرست؛ // خطای پرچم $ نام کاربری \u003d ثابت ($ _ POST ["نام کاربری"])؛ //نام کاربری $ password \u003d Fix ($ _ POST ["پسورد"])؛ // رمزعبور) // رمز عبور را بررسی کنید if ($ password \u003d\u003d "") ($ errmsg \u003d "رمز عبور از دست رفته است" ؛ // خطا $ errflag \u003d true؛ // در صورت بروز خطا پرچم را بالا می برد) // در صورت تنظیم پرچم خطا ، به فرم ثبت نام برگردانید // خطاهای ورود به سیستم session_write_close ()؛ // جلسه نزدیک // تغییر مسیر خروج () ) // پرس و جو از پایگاه داده $ qry \u003d "SELECT * FROM" users` WHERE `Username` \u003d" $ username "AND` Password` \u003d" ". md5 (پسورد $)" "" "؛ $ result \u003d mysql_query ($ qry)؛ // بررسی کنید که آیا درخواست موفقیت آمیز بود (اگر داده ای در مورد آن وجود دارد) if (mysql_num_rows ($ result) \u003d\u003d 1) (در حالی که ($ row \u003d mysql_fetch_assoc ($ result)) ($ _SESSION ["UID"] \u003d $ row ["UID"]؛ // UID را از پایگاه داده دریافت کرده و در جلسه قرار دهید $ _SESSION ["USERNAME"] \u003d $ نام کاربری؛ // تنظیم می کند اگر نام کاربری در جلسه مطابقت داشته باشد session_write_close ()؛ // جلسه نزدیک header ("مکان: end.php")؛ // تغییر مسیر )) other ($ _SESSION ["ERRMSG"] \u003d "نام کاربری یا گذرواژه نامعتبر"؛ \u200b\u200b// خطا session_write_close ()؛ // جلسه نزدیک هدر ("مکان: login.php")؛ // تغییر مسیر خروج () )؟\u003e

بیایید یک صفحه ثبت نام ایجاد کنیم ، آن را "Register.php" بنامیم. این شبیه به صفحه ورود است ، فقط چند فیلد دیگر دارد و به جای پیوند ثبت نام ، پیوندی به login.php در صورتی که کاربر قبلاً دارای یک حساب کاربری باشد.

کد PHP

0) { // در صورت وجود خطاهای جلسه $ err \u003d "

"؛ // شروع پیش نمایش جدول ($ _SESSION [" ERRMSG "] به عنوان $ msg) (" // هر خطایی را تنظیم می کند $ err. \u003d " "; // آنها را به یک متغیر بنویسید ) $ err. \u003d "
". $ msg."
"؛ // پایان تنظیم جدول ($ _SESSION [" ERRMSG "])؛ // جلسه را خراب کنید } ?> فرم ثبت نام
نام کاربری
پست الکترونیک
کلمه عبور
تکرار رمز عبور
من یک حساب دارم

حالا بیایید یک اسکریپت ثبت نام را در پرونده "reg.php" ایجاد کنیم. این برنامه شامل "sql.php" برای اتصال به پایگاه داده است. برای پاک کردن قسمت ورودی از همان کارکرد مشابه در اسکریپت ورود استفاده می کند. متغیرها برای خطاهای احتمالی تنظیم شده اند. بعدی عملکردی برای ایجاد شناسه منحصر به فرد است که قبلاً ارائه نشده است. سپس داده ها از فرم ثبت نام گرفته و اعتبار می یابند. بررسی می کند که آدرس ایمیل در آن قرار دارد قالب مورد نظرو همچنین اینکه آیا رمز ورود به درستی وارد شده است یا خیر. سپس اسکریپت بررسی می کند که آیا کاربر با همین نام در بانک اطلاعاتی وجود دارد یا خیر ، در صورت بروز خطا گزارش می دهد. سرانجام ، کد کاربر را به پایگاه داده اضافه می کند.

کد PHP

// شروع جلسه برای ضبط تابع ثابت ($ str) (// زمینه های روشن $ str \u003dtrim ($ str) ؛ اگر (get_magic_quotes_gpc ())) ($ str \u003d نوارهای تبلیغاتی ($ $) ؛) mysql_real_escape_string را برگردانید($ $)؛ ) $ errmsg \u003d آرایه ()؛ // آرایه برای ذخیره خطاها $ errflag \u003d نادرست؛ // flag flag UID \u003d "12323543534523453451465685454"؛ // ID منحصر به فرد $ نام کاربری \u003d ثابت ($ _ POST ["نام کاربری"])؛ //نام کاربری $ email \u003d $ _POST ["ایمیل"]؛ // Email $ password \u003d Fix ($ _ POST ["پسورد"])؛ // پسورد $ rpassword \u003d ثابت ($ _ POST ["rpassword"])؛ // تکرار رمز عبور // بررسی نام کاربری if ($ username \u003d\u003d "") ($ errmsg \u003d "نام کاربری از دست رفته"؛ // خطا $ errflag \u003d true؛ // خطا پرچم را بالا می برد ) // ایمیل را بررسی کنید اگر (! eregi ("^ [_ a-z0-9 -] + (\\. [_ a-z0-9 -] +) * @ + (\\. +) * (\\. (2،3 )) $ "، $ email)) (// باید با قالب مطابقت داشته باشد: [ایمیل محافظت شده] $ errmsg \u003d "ایمیل نامعتبر"؛ // خطا $ errflag \u003d true؛ // خطا پرچم را بالا می برد } // رمز عبور را بررسی کنید if ($ password \u003d\u003d "") ($ errmsg \u003d "گذرواژه از دست رفته"؛ // خطا $ errflag \u003d true؛ // خطا پرچم را بالا می برد } // بررسی تکرار رمز عبور if ($ rpassword \u003d\u003d "") ($ errmsg \u003d "رمز عبوری تکرار نشد"؛ // خطا $ errflag \u003d true؛ // خطا پرچم را بالا می برد } // بررسی کنید که آیا رمزعبور معتبر است یا خیر if (strcmp (رمز عبور $ ، کلمه کلیدی $!)! \u003d 0) ($ errmsg \u003d "کلمه عبور مطابقت ندارد"؛ // خطا $ errflag \u003d true؛ // خطا پرچم را بالا می برد } // بررسی کنید که آیا نام کاربری رایگان است if ($ username! \u003d "") ($ qry \u003d "SELECT * FROM" users` WHERE `Username` \u003d" $ username ""؛ // query MySQL $ result \u003d mysql_query ($ qry)؛ if (result $) (اگر (mysql_num_rows (نتیجه $)\u003e 0) ( // اگر نام از قبل استفاده شده است $ errmsg \u003d "نام کاربری قبلاً در حال استفاده است"؛ // پیغام خطا $ errflag \u003d درست؛ // خطا پرچم را بالا می برد ) mysql_free_result (نتیجه $)؛ )) // در صورت عدم تأیید داده ها ، دوباره به فرم ثبت نام هدایت می شود if ($ errflag) ($ _SESSION ["ERRMSG"] \u003d $ errmsg؛ // پیغام خطا session_write_close ()؛ // جلسه نزدیک header ("مکان: Register.php")؛ // تغییر مسیر خروج () ) // اضافه کردن داده به پایگاه داده $ qry \u003d "INSERT INTO` userauth`.`users` ("UID" ، "نام کاربری" ، "ایمیل" ، "رمزعبور") VALUES ("$ UID" ، "نام کاربری $" ، "$ email" ، "". md5 (رمز عبور $) "") "؛ $ result \u003d mysql_query ($ qry)؛ // بررسی کنید که آیا درخواست افزود موفقیت آمیز بوده است یا خیر اگر (نتیجه $) (تکرار "از شما برای ثبت نام متشکریم". $ نام کاربری ". لطفاً وارد شوید اینجا"؛ derket () ؛) other (ببندید (" خطا ، لطفا بعداً با ما تماس بگیرید ")؛)؟\u003e

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

کد PHP

سرانجام ، اسکریپت "auth.php" می تواند مورد استفاده قرار گیرد تا صفحات فقط در دسترس کاربران مجاز باشد. این اطلاعات ورود به سیستم را بررسی می کند و در صورت صحت ، به کاربر اجازه می دهد صفحات را مشاهده کند و در غیر این صورت ، درخواست ورود به سیستم را می دهد. بعلاوه ، اگر شخصی با ایجاد یکی از جلسات سعی در هک کردن سایت داشته باشد ، مانند پرونده کلی قطع می شود.

کد PHP

یکی از شرایط موجود در کد بالا موضوع سؤال در است.

کد زیر برای کاربران مجاز باید در صفحه درج شود ، به عنوان مثال "عضو.php" نامیده می شود ، اما شما را می توان هر آنچه دوست دارید بنامید.

کد PHP

شما مجاز به دسترسی به این صفحه هستید. خروج ( )

احراز هویت کاربر آماده است!

زنگ

کسانی هستند که این خبر را قبل از شما می خوانند.
برای دریافت آخرین مقالات مشترک شوید.
پست الکترونیک
نام
نام خانوادگی
چگونه می خواهید The Bell را بخوانید
بدون اسپم