Ali Ghaleyan
6 سال پیش توسط Ali Ghaleyan مطرح شد
12 پاسخ

ساخت احراز هویت Auth در php

سلام و درود
من میخواستم یه سیستم احراز هویت در php mvc بسازم. کاری که من کردم این هست که اطلاعات کاربر به صورت session ذخیره میشه.
مشکلی که من دارم اینه که وقتی میخوام اطلاعات کاربر لاگین شده رو جای دیگه ای استفاده کنم و نشون بدم وقتی session رو داخل یه کلاس استارت میکنم ارور میده جوری که خیلی از حالت هارو چک کردم اما باز به استارت کردن سشن ارور میده.... البته یک بار سشن قبلش توی فایل cobfig استارت میشه برای ثبت اطلاعاتش
که مجبور شدم توی فایل config جدای از کلاس ها سیشن رو استارت کنم یعنی که توی همه ی صفحات استارت شده هستش... آیا این کار درسته... اینکه سشن همیشه استارت باشه تا چه حد میتونه مشکل ساز باشه توی لود صفحه
اگر هم نمونه ای از احراز هویت و این سیستم داخل php داشته باشین ممنون میشم معرفی کنین


ثبت پرسش جدید
Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 6 سال پیش مطرح شد
0

سلام
@Serjik

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

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


deleted account
تخصص : Unemployed
@wp.wp 6 سال پیش آپدیت شد
1

@Serjik
سلام خدمت شما
اگه توی همه صفحات از اطلاعات کاربر استفاده میکنید مشکلی از این بابت که همه جا استارت باشه نیست ولی اگه تو جاهای خاصی میخواین استفاده کنید بهتره همونجا فقط استفاده کنید ... اگر هم موقع استارت کردن ارور میده بهتره بود متن ارور رو بفرستین
ولی حتما این نکات رو بررسی کنید :
اول اینکه بهتره داخل کلاس سشن رو استارت نکنید شما داخل همون کلاس از سشن استفاده کنید بعد هرجایی که از اون کلاس استفاده کردید سشن رو اونجا استارت کنید
و اینکه حتما سشن رو ابتدای همه کد ها استارت کنید قبلش حتی یک نقطه هم وجود نداشته باشه ( باعث بوجود اومدن مشکلات ارسال هدر میشه ) که ممکنه همین اروری هم که برای شما میاد همون باشه
به انکودینگ فایلتونم دقت کنید که حتما به صورت UTF8-without BOM باشه ( همینم میتونه موجب ارسال شدن هدر ها قبل استارت شدن سشن ها باشه )
میتونید با ادیتور notepad++ انکودینگ رو تغییر بدید .
اگه بازم مشکلتون رفع نشد متن ارور رو بفرستین دوستان کامل تر بررسی میکنن .


Ali Ghaleyan
تخصص : برنامه نویس لاراول
@Serjik 6 سال پیش آپدیت شد
0

@m.a3raham
@RaymondDragon

Warning: session_start(): Cannot start session when headers already sent in C:\xampp\htdocs\NanoRoyal\app\Libraries\Session_Helpers.php on line ۱۳

این ارور هست
و این هم کدم

class Session_Helpers
{
public function __construct()
{
session_start();
}

public function say($name, $data = null)
{
    if (isset($data) && $data != null) {
        if (!isset($_SESSION[$name])) {
            $_SESSION[$name] = $data;
        }
    } else {
        if(isset($_SESSION[$name]) && $_SESSION[$name]!=null){
            return $_SESSION[$name];
        } else {
            return false;
        }
    }
}
}

علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 6 سال پیش مطرح شد
1

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


deleted account
تخصص : Unemployed
@wp.wp 6 سال پیش مطرح شد
1

@Serjik
خب گفتم که همه اینارو یه بار دیگه با دقت بخونید
الان میگه هدر ها ارسال شده واس همین نمیتونه session_start کنه !
داخل خود کلاس سشن رو استارت نکن هر موقع خواستی از سشن تو هر صفحه ای استفاده کنی بالای بالای صفحه سشن رو استات کن قبلش یه نقطه هم نباشه


Ali Ghaleyan
تخصص : برنامه نویس لاراول
@Serjik 6 سال پیش مطرح شد
0

@m.a3raham
روشی که گفتید رو متوجه شدم اما اگه بخوام که چیزی از استارت کردن سیشنها داخل صفحاتم نباشه جز کنترلر ها چی
مثلا لاراول چطور اینکاررو میکنه


deleted account
تخصص : Unemployed
@wp.wp 6 سال پیش مطرح شد
1

@Serjik
والا راستش من با لاراول آشنایی ندارم ... اینو باید بقیه دوستان که کار کردن بگن لاراول چطوری این کارو انجام میده
ولی اگه کلی میخواید این مشکل ارسال شدن هدر رو بدون اینکه کداتونو تغییر بدید حل کنید
به فایل php.ini برید و یه قسمتی است به نام output_buffering اون رو روی 4096 قرار بدید تا یکمی با تاخیر هدر هارو ارسال کنه و این مشکل پیش نیاد .


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 6 سال پیش مطرح شد
1

لاراول این کار رو در حین راه‌اندازی(bootstraping) انجام میده.


Ali Ghaleyan
تخصص : برنامه نویس لاراول
@Serjik 6 سال پیش مطرح شد
0

@ali.bayat
میشه بیشتر بگید توی چه قسمتی
وقتی که auth صدا زده میشه یا اینکه کلا سیشن استارته
یا مورد دیگه ای ....


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 6 سال پیش مطرح شد
1

@Serjik
لاراول بطور مستقیم از سشن‌های بومی PHP استفاده نمیکنه برای همثده که session_start داخلش نمی‌بینید.
یه گلوبال میدلور داریم در لاراول که برای هر ریکوئست اجرا میشه به نام Illuminate\Session\Middleware\StartSession


Ali Ghaleyan
تخصص : برنامه نویس لاراول
@Serjik 6 سال پیش مطرح شد
0

@ali.bayat
میتونید کمکم کنید یه چیزی شبیه به auth لاراول بسازم که مجبور نشم توی هر صفحه سیشن استارت کنم


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 6 سال پیش مطرح شد
1

@Serjik
لاراول از درایورهای مختلفی برای ثبت اطلاعات سشن‌ها استفاده میکنه. (file, array, cookie, database و حتی redis)
که داخل فایل config/session.php قابل تنظیمه. اما مدیریت این درایورها بعهده کلاسی بنام SessionManager هست

https://github.com/igorw/laravel-framework/blob/master/src/Illuminate/Session/SessionManager.php

این کلاس هم خودش از چندین کلاس دیگه استفاده میکنه

use Illuminate\Support\Manager;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage;
use Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler;
use Symfony\Component\HttpFoundation\Session\Storage\Handler\NullSessionHandler;
use Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeFileSessionHandler;

به عبارتی برای پیاده‌سازی این سیستم در vanilla php شما باید تمام این کلاسها٬ اینترفیس‌ها و کلاس‌های abstract رو بعلاوه وابستگی هاشون رو در نظر بگیرید و به کدتون اضافه کنید


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام