درباره کوکی ها

32 views
Skip to first unread message

a musavi

unread,
Jul 4, 2012, 7:22:52 AM7/4/12
to sharif-ce...@googlegroups.com
بسمه تعالی


ببخشید  چون قبلا با پی اچ پی کار نکرده ایم سوالات اولیه نیز به راحتی حل نمی شوند . ممکن است در این باره توضیح دهید ::


اینکه یک صفحه میانی باشد که بعد از لاگین در آنجا لینکی باشد که "خوش آمدید برای ورود به سایت روی لینک کلیک کنید "(برای گرفتن درخواست کاربر به صفحه اصلی ) مانعی دارد ؟

درکل اگر نخواهیم این کار را بکنیم چند سوال وجود دارد :‌

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


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


باز اگر مجاز بودیم از session cookie های خود php استفاده کنیم (PHPSID) این مشکل حل می شد چون انگار اتوماتیک کاربر شناخته می شد ولی ما اگر بعد از لاگین موفق کوکی بدهیم که در ریدارکت شدن باز کوکی هنوز مقداری ندارد . اگر هم اول صفحه اصلی کوکی بدهیم که نمی توانیم کاربر لاگین کرده را از غیر از آن تشخیص بدهیم



با تشکر

Ahmad Boorghany

unread,
Jul 5, 2012, 6:14:41 AM7/5/12
to sharif-ce...@googlegroups.com


2012/7/4 a musavi <musa...@gmail.com>

بسمه تعالی


ببخشید  چون قبلا با پی اچ پی کار نکرده ایم سوالات اولیه نیز به راحتی حل نمی شوند . ممکن است در این باره توضیح دهید ::


اینکه یک صفحه میانی باشد که بعد از لاگین در آنجا لینکی باشد که "خوش آمدید برای ورود به سایت روی لینک کلیک کنید "(برای گرفتن درخواست کاربر به صفحه اصلی ) مانعی دارد ؟

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

درکل اگر نخواهیم این کار را بکنیم چند سوال وجود دارد :‌

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



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


نه. شما روند کلی کار را درست متوجه نشده اید. در زیر من تمام اتفاقاتی که در یک لاگین عادی می افتد را نوشته ام:

1- کاربر برای اولین بار در نوار آدرس http://ce.sharif.edu/~myuser را می نویسد.
2- مرورگر یک درخواست HTTP برای سرور می فرستد. در این درخواست هیچ کوکی وجود ندارد.
3- برنامه index.php اجرا شده و کوکی را چک می کند. هیچ کوکی نمی بیند و می فهمد که کاربر لاگین نکرده است. در هر صورت صفحه اصلی را نمایش می دهد که لینکی به صفحه login.php دارد.
4- کاربر روی لینک login.php کلیک می کند.
5- مرورگر یک درخواست دیگر ارسال می کند که باز هم کوکی ندارد.
6- login.php اجرا شده و فرم لاگین را نشان می دهد.
7- کاربر نام کاربری و رمز را وارد کرده و submit می کند (فرض کنید فرم به مقصد login.php می رود).
8- مرورگر درخواستی حاوی این اطلاعات برای سرور می فرستد.
9- login.php این بار نام کاربری و رمز عبور را می بیند (دفعه قبل این پارامترها با درخواست ارسال نشده بود) و جای نمایش فرم لاگین این دفعه نام کاربری و رمز عبور را چک می کند. اگر غلط بودند پیغام خطا به کاربر نمایش داده می شود. در غیر این صورت یک session id تصادفی درست شده و در پایگاه داده ذخیره می شود. یک جواب HTTP ارسال می شود که اولاً set cookie دارد و session id را برای کاربر می فرستد. ثانیا به مرورگر می گوید که به طور خودکار (بدون دخالت کاربر) به صفحه panel.php برود. این کار را با فرستادن هدر Location یا تگ meta یا javascript می توان انجام داد.
10- مرورگر جواب را گرفته و کوکی را ذخیره می کند. سپس بدون دخالت کاربر یک درخواست دیگر برای صفحه panel.php می فرستد.
11- panel.php اول کوکی را گرفته و در پایگاه داده چک می کند. اگر درست بود پنل را به کاربر نمایش می دهد.

نکات:
- سناریو بالا نمونه است. در چهارچوب نیازمندی ها می توانید از آن تبعیت نکنید. مثلاً اکثر سایت ها برای کاربر لاگین نکرده نیز session id می زنند. ولی مراقب حمله session fixation باشید.


باز اگر مجاز بودیم از session cookie های خود php استفاده کنیم (PHPSID) این مشکل حل می شد چون انگار اتوماتیک کاربر شناخته می شد ولی ما اگر بعد از لاگین موفق کوکی بدهیم که در ریدارکت شدن باز کوکی هنوز مقداری ندارد . اگر هم اول صفحه اصلی کوکی بدهیم که نمی توانیم کاربر لاگین کرده را از غیر از آن تشخیص بدهیم


PHP Sessions هم همین کارهای دستی بالا را انجام می دهد و کار خارق العاده ای نمی کند.
 


با تشکر

--
You received this message because you are subscribed to the Google Groups "sharif-ce874-90912" group.
To post to this group, send email to sharif-ce...@googlegroups.com.
To unsubscribe from this group, send email to sharif-ce874-90...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/sharif-ce874-90912?hl=en.

Reply all
Reply to author
Forward
0 new messages