سوال در موردجلسه و کوکی

scooter2005

Member
من دو تا کتاب php 5 داشتم در مورد کوکی و جلسه session توش خوندم آخر سر دقیق نفهمیدم کارشون چیه کسی می تونه به صورت کاربردی و قابل فهم این دو مورد دو تشریح کنه ؟:wink:
 

Allahparast

Member
از سشنها و کوکی ها برای ذخیره سازی داده ها روی سرویس گیرنده استفاده میشه که بعد به وسیله مرورگر می تونی این اطلاعات رو بگیری از کوکی و سشن برای لاگین و خیلی برنامه های دیگه استفاده میشه:rose:

http://ir.php.net/manual/en/book.session.php
 

amirepsilon

Active Member
سلام
دوستان من هم در مورد جلسه سوال دارم
فکر کنید دو تا کاربر عهمزمان در سایت هستن
حالا یکیشون لوگ اوت میکنه

این هم کد logout :

session_start();
$_SESSION["Username"] = 0;
$_SESSION["Password"] = 0;

حالا چطوریه که کاربر دومی هنوز لوگ این میمونه ؟
یعنی خود سرور میفهمه که برای هر کاربر جلسه جداگونه در نظر میگیره ؟
 

Allahparast

Member
توضیح بالا دقیق نخوندید
از سشنها و کوکی ها برای ذخیره سازی داده ها روی سرویس گیرنده استفاده میشه که بعد به وسیله مرورگر می تونی این اطلاعات رو بگیری از کوکی و سشن برای لاگین و خیلی برنامه های دیگه استفاده میشه
یعنی سشن از روی سیستم شما حذف میشه بعد دیگه مرورگر نمی تونه اطلاعات رو بازیابی کنه
مثلا یه کاربر لاگین کرده
PHP:
<?php
session_start();
$_SESSION['USername']="allahyar";
بعد برای صفحات باید بیای چک کنی که این سشن وجود داره یانه
PHP:
<?php
if($_GET['page']=="logout") { unset($_SESSION['USername']);/*  Hazf session  */ }
if(isset($_SESSION['USername'])){ // agar session ['USername'] vojod dasht dastorat ejra beshe 
echo"welcome".$_SESSION['USernmae'];
}else echo "please Login";
?>
این روش از نظر امنیتی مشکل داره و باید از دیتابیس نام کاربری چک بشه
:rose:
 
آخرین ویرایش:

P.H.P

Member
میدونم نباید از بحث خارج شد ولی

برای خروج از سیستم همیشه سعی کنید اول Session رو null کنید بعد unset و بعد session_destroy

البته session_destroy کار اصلی رو انجام میده ولی اول null بشه بهتره

برای مثال

PHP:
$_SESSION["USER"] = null;

unset($_SESSION["USER"]);

session_destroy();

موفق
 

foranyone

Well-Known Member
من همیشه با session_start مشکل داشتم و دارم ! با اینکه مطمئنم قبل از اون حتی یه کاراکترم فضای خالی وجود نداره ولی همیشه اررور میده !
 

amirepsilon

Active Member
سلام
دوستان آیا هرجا
session_start();
استفاده کردیم حتما باید آخرش از
session_destroy();
استفاده کنیم ؟

در ضمن
session_unset();
کارش چیه ؟
 
آخرین ویرایش:

Allahparast

Member
سلام
دوستان آیا هرجا
***xion_start
استفاده کردیم حتما باید آخرش از
session_destroy();
استفاده کنیم ؟

در ضمن
session_unset();
کارش چیه ؟

Session_start();
که معلومه برای شروع سشن استفاده میشه

session_unset هم برای خارج کردن از ثبت تمام نشست ها

session_destroy هم برای خاتمه هست
:rose:
 

nasser_ray

Member
سلام
جواب تمام سوالات این پست

فکر کنم بصورت کلی شما در توضیحاتتون اشتباه کردید.
البته اگه تو همین سایت جستجو می کردید خیلی سریع به جوابتون میرسیدید
من دو تا کتاب php 5 داشتم در مورد کوکی و جلسه session توش خوندم آخر سر دقیق نفهمیدم کارشون چیه کسی می تونه به صورت کاربردی و قابل فهم این دو مورد دو تشریح کنه ؟
(اسم اون دو کتاب به همراه مترجم یا نویسندش رو هم بذارید که کسی نگیره). :)

از سشنها و کوکی ها برای ذخیره سازی داده ها روی سرویس گیرنده استفاده میشه
دوست عزیز در یک توضیح مختصر باید بگم که Session ها یا جلسه (ها) برعکس کوکی ها در سرور ایجاد می شند. و هیچ چیزی در کامپیوتر کاربر ایجاد نمی کنند.
و مرورگر هیچ نقشی در دریافت اطلاعات نداده. [بجز موافقت درمورد ایجاد کوکی ایجاد ]
سلام
دوستان من هم در مورد جلسه سوال دارم
فکر کنید دو تا کاربر عهمزمان در سایت هستن
حالا یکیشون لوگ اوت میکنه

این هم کد logout :

session_start();
$_SESSION["Username"] = 0;
$_SESSION["Password"] = 0;

حالا چطوریه که کاربر دومی هنوز لوگ این میمونه ؟
یعنی خود سرور میفهمه که برای هر کاربر جلسه جداگونه در نظر میگیره ؟
هر Session چیزی بنام ID داره (session_id) که اون رو از شر تداخلهای احتمالی محافظت می کنه
به همین ترتیب کوکی ها هم برای جلوکیری از تداخل از نام منحصر به فرد برای هر سایت استفاده می کنند.

با تشکر از توضیحات دوستان Allahparast و P.H.P
پیشنهاد من اینه که هیچ وقت از عبارت session_destroy استفاده نکنید. همچنین اگه نیازی به یک مقدار ندارید بهتر اون رو unset کنید

من همیشه با session_start مشکل داشتم و دارم ! با اینکه مطمئنم قبل از اون حتی یه کاراکترم فضای خالی وجود نداره ولی همیشه اررور میده !
درسته. اما
در سیستم کد گذاری UTF-8 از کد شناسی - کنترلی خاصی بنام BOM - Byte Order Mark استفاده می شود. این کد بدون درخواست کاربر در اول فایل قرار میگیره (اگه از برنامه های HexEditor استفاده کنید اونوقت می بینیدش).
اگر متوجه شده باشید در صورتی که همون فایل رو با ساختار ANSI ذخیره کنید مشگل حل و عملیات انجام میشه
برای استفاده از ساختار UTF-8 بهتره در ویرایشگرهای قوی فورمت (قالب) ذخیره سازی رو به UTF-8 Without BOM تغییر دهید.

دوستان آیا هرجا
session_start();
استفاده کردیم حتما باید آخرش از
session_destroy();
استفاده کنیم ؟

در ضمن
session_unset();
کارش چیه ؟
خیر نیازی نیست. جلسه ها (Session) هم مانند کوکی ها دارای طول عمر هستند و بعد از منقضی شدن خود به خود ازبین می روند (این طول عمر در فایل php.ini تعریف شده است. که تا آنجای که بخاطر دارم حدوداً در بعضی 30 دقیقه و در بعضی 3 ساعت است).
session_unset هم کل متغیرهای تعریف شده در جلسه را ازبین میبرد (دقت کنید متغیرها را ازبین میبرد نه جلیه را)

هشدار هیچ وقت از عبارت unset($_SESSION) استفاده نکنید


با آرزوی موفقیت
 

Masoud1365

مدیر انجمن
پیشنهاد من اینه که هیچ وقت از عبارت session_destroy استفاده نکنید. همچنین اگه نیازی به یک مقدار ندارید بهتر اون رو unset کنید
برای چی ؟ اگر نیاز به سشن ها نداشته باشیم با این دستور کل اونا از بین میرن درسته ؟
 

P.H.P

Member
پیشنهاد من اینه که هیچ وقت از عبارت session_destroy استفاده نکنید. همچنین اگه نیازی به یک مقدار ندارید بهتر اون رو unset کنید

درسته ولی این برای یک مقدار هست

برای خروج تمامی session ها باید حذف بشن که فقط کاره session_destroy هست
 
آخرین ویرایش:

Allahparast

Member
اوخ ببخشید جلسات اطلاعات رو توی هارد سرویس دهنده ذخیره می کنه ولی کوکی فایلهای کوچکی را روی کامپیوتر ذخیره می کنه :-?
چون من از لوکال استفاده می کردم کلا فکرمی کردم سشن هم ذخیره رو سرویس گیرنده هست
دوستان ببخشین اطلاعات غلط دادم


بازهم ممنون که اشتباه من رو بهم گفتی !
 

nasser_ray

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

Allahparast

Member
دوستمون درست گفتن فرض کن شما غیر از اون مثلا برای سیستم فروشگاه سبد خرید اگه بخواهیم همه رو پاک کنیم ؟!
 

ziXet

مدیر انجمن PHP/MYSQL
سلام

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

amirepsilon

Active Member
راست میگه :دی

حالا بچه ها چطوری session_id رو نگهداریم و مقایسه کنیم و . . . برای امنیت ؟
 

P.H.P

Member
راست میگه :دی

حالا بچه ها چطوری session_id رو نگهداریم و مقایسه کنیم و . . . برای امنیت ؟


نگه داری؟ مگه نگه داشته نیست؟
مقایسه برای چی؟ این کار صحیح نیست

بهتره وقتی میخواید session معرفی کنید id جدید تعریف بشه که این کارو میتونید با ;()session_regenerate_id انجام بدید.

برای امنیت یه تاپیک جدا زده بشه بهتره

ولی توجه کنید که مقدار های مهم که ممکنه مشکل امنیتی بوجود بیارن رو حتما encode کنید

و حتما مسیری برای ذخیره session معرفی کنید
 

جدیدترین ارسال ها

بالا