درود و خسته نباشید مهندسین عزیز
این سوال رو من چند ماه پیش مطرح کردم و جواب درستی نگرفتم .هنوز هم برام سواله که سیشن چطوری پیاده سازی شده توی لاراول.
من فک میکنم سیشن میاد یک کلید روی سمت سرور ذخیره میکنه - همین کلید رو هم روی یک کوکی برای کاربر ذخیره میکنه . و اینطوریه که میفهمه هر سیشن مربوط به کدوم کاربه . درسته یا نه ؟
چون تا جایی که من مطالعه کردم - و متوجه بعضی مسائل شدم http یک پروتکل stateless هستش یعنی درخواست ها از همدیگه مجزا هستند.
و یک سوال دیگه چطور ما این دستور رو که میزنیم میتونیم به ip کاربر دسترسی پیدا کنیم. اما من هرچقدر که توی request Header یا response Header نگاه کردم فیلدی با نام ip یا چنین چیزی ندیدم ؟ ( این مربوط به سوال قبلمه هنوز - چون اگه id هر کاربری رو داشته باشیم، میتونیم سیشن رو به هر کاربر نسبت بدیم ؟!!! ولی همینطور که گفتم میتونیم با دستور زیر داشته باشیمش ولی چرا من توی header هر درخواست نمیبینمش؟!!!)
return request()->ip();
به طور کلی، این امکان وجود داره تا من بعنوان برنامه نویس یکسری اطلاعات رو روی مرورگر بازدیدکنندگان سایتم بصورت (key-value) ذخیره کنم تا از این به بعد همراه تمامی درخواست هایی که از این بازدیدکننده دریافت میکنم بهشون دسترسی داشته باشم. اینجوری میشه درخواست ها و بازدیدکننده ها رو از هم تشخیص داد. این اطلاعات در Cookie ذخیره میشوند.
تا اینجا همه چیز خوبه. منتها تنها ایرادش اینه که خود کاربران میتونن این اطلاعات رو ببینید و ویرایش کنند. در خصوص بعضی اطلاعات خاص این قضیه جالب نیست. به همین خاطر همون طوری که خودتون اشاره کردید، یک token رندوم ایجاد میکنیم و بعنوان کلید سشن کاربر در نظر میگیریم. این token در مرورگر کاربر ذخیره می شود. ولی خود اطلاعات بجای مرورگر، داخل سرور (بصورت فایل، ذخیره در MySQL یا Redis یا ...) ذخیره میشوند. اینجوری کاربر دسترسی به این اطلاعات ندارد و خاطرمون از این قضیه راحت میشه. با استفاده از این کلید هم میتونیم به اطلاعات مربوط به این کاربر در سرور برسیم.
این ساز و کار کلی و عمومی و فرق کوکی و سشن بود. حالا لاراول بعنوان یک فریم ورک، یکسری اقدامات اضافه هم برامون انجام میده که باعث افزایش امنیت وبسایتمون میشه. مثلا اگر دقت کنید یک Middleware داریم که میاد تمام کوکی ها رو رمزنگاری میکنه. اینجوری کاربر بازهم امکان مشاهده و یا تغییر مقدار کوکی رو نداره. چون بجای مواجه شدن با یک متن ساده مثل This is cookie value
با چیزی شبیه K43&*(#gikj23dMfg=
مواجه میشه که فقط خود لاراول در بک اند میتونه مقدارش رو بخونه. کاربر حتی اگر یک کاراکترش رو هم دستکاری کنه دیگه معتبر نخواهد بود.
در خصوص آدرس IP کاربر هم به طور خلاصه، در بحث شبکه و ارتباطات لایه های مختلفی داریم که در هر لایه پروتکل های مختلفی وجود داره. یک درخواست http خودش در قالب یک TCP/IP packet ارسال میشه.
و چیزی که شما در تب Network گوگل کروم میبینید چیزی هست که مربوط به لایه http میشه. حال آنکه یکسری اطلاعات دیگر مثل آدرس IP شما در پکتی که در لایه TCP/IP ارسال میشه وجود داره و اینجوری میشه که سرور میتونه متوجه بشه این درخواست از سمت چه IP اومده.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟