PDA

View Full Version : session_destroy



Vahid Faraji
شنبه 30 مرداد 1389, 11:07 صبح
سلام.
مي خواستم بدونم session_destroy مگه براي kill كردن همه session ها نيست، پس چرا در كد زير اين اتفاق نمي افته؟


<?php
session_start(); // Initialize session data
ob_start(); // Turn on output buffering
?>
<?php
echo 'test = ' . $_SESSION['test'] . "<br>";
echo 'test1 = ' . $_SESSION['test1'] . "<br>";

$_SESSION['test'] = '123';
$_SESSION['test1'] = '456';

echo 'test = ' . $_SESSION['test'] . "<br>";
echo 'test1 = ' . $_SESSION['test1'] . "<br>";

unset($_SESSION['test']);
@session_destroy();

echo 'after unset, test value = ' . $_SESSION['test'] . "<br>";
echo 'after destroy, test value = ' . $_SESSION['test'] . "<br>";
echo 'after destroy, test1 value = ' . $_SESSION['test1'] . "<br>";
?>


اومدم به جاي session_destroy() از


//$_SESSION = array();
// Finally, destroy the session
@session_destroy();

استفاده كردم، درست شد، نمي دونم چرا؟

bestirani2
شنبه 30 مرداد 1389, 11:18 صبح
حتماً قبل destroy باید unset رو هم استفاده کنی
destroy جلسات رو میبنده؛ یعنی دیگه نمیتونی توی سرور بنویسی

مثال زیر رو نگاه کن


$_SESSION['test'] = 5;
echo 'test = ' . $_SESSION['test'] . "<br>";

ایجا بدون اینکه SESSION رو باز کنیم، $_SESSION['test'] رو مقدار دهی کردیم و بعد هم صدا زدیم و کار هم میکنه، مانند یک آرایه عادی ولی نشتی در سرور ایجاد نشده
یعنی اگه به صفحه ی بعدی بریم دیگه وجود ندارد
اون مثال هم همینطور هست
اگه در یک صفحه دیگه جلسه رو باز کنی تست 1 موجود نیست
واسه این همیشه برای بستن کامل و اتلاف نشدن حافظه unsetهم استفاده کن

bestirani2
شنبه 30 مرداد 1389, 11:21 صبح
اومدم به جاي session_destroy() از


//$_SESSION = array();
// Finally, destroy the session
@session_destroy();
استفاده كردم، درست شد، نمي دونم چرا؟
اون وقت فرقش با قبلی چیه :متفکر:
همون رو عیناً استفاده کردی :لبخند:

Vahid Faraji
شنبه 30 مرداد 1389, 11:21 صبح
ممنون.
پس چرا وقتي از $_SESSION = array(); استفاده كردم، و بعد destroy مقدار test1 خالي بود؟

bestirani2
شنبه 30 مرداد 1389, 11:36 صبح
ممنون.
پس چرا وقتي از $_SESSION = array(); استفاده كردم، و بعد destroy مقدار test1 خالي بود؟
چون در این حالت میای میگی کل آرایت بی مقدار بشه
یک آرایه هم داشته باشی و بعد این رو به کار ببری همین میشه
برای یک متغیر مثل این میمون که اول تعریف کنی و بعد بیای همون متغیر رو یک مقدار خالی بدی که از نظر حافظه فرقی به حال ما نداره
همون unset از همه بهتره

Vahid Faraji
شنبه 30 مرداد 1389, 11:44 صبح
چون در این حالت میای میگی کل آرایت بی مقدار بشه
یک آرایه هم داشته باشی و بعد این رو به کار ببری همین میشه

ببخشيد شايد من خوب درك نكردم. ما وقتي مي گيم $_SESSION = array() دقيقا معنيش چيه؟

bestirani2
شنبه 30 مرداد 1389, 12:42 عصر
ببخشيد شايد من خوب درك نكردم. ما وقتي مي گيم $_SESSION = array() دقيقا معنيش چيه؟

میگیم آرایه مربوطه رو درست کن و چون داخل پرانتز هیچ مقداری ندادیم تمام مقدادیر خالی حساب میشه

این کد رو نگاه کن


<?php
$abc = array('1', '2');
echo $abc[0]; // echo '1'
$abc = array();
echo $abc[0]; // echo ''
?>

این کار دقیقاً مقل یک متغیر هست که یک مقداری بدیم و بعد بگیم مقدار این خالی باشه

Vahid Faraji
شنبه 30 مرداد 1389, 13:45 عصر
میگیم آرایه مربوطه رو درست کن و چون داخل پرانتز هیچ مقداری ندادیم تمام مقدادیر خالی حساب میشه

چرا مي آد يه آرايه خالي در نظر مي گيره و محتواي $_session را آرايه خالي در نظر مي گيره، چه اتفاقي مي افته كه وقتي اين حالتو در نظر مي گيره و سپس از session_destroy استفاده مي كنه بدون اين كه بيايم محتواي session ي را با unset خالي كنيم، محتواي اونو خالي مي كنه طبق مثالي كه بالا زدم،
ممنون مي شم جواب بديد فكر كنم دارم به مفهومش نزديك مي شم.

bestirani2
شنبه 30 مرداد 1389, 14:53 عصر
چرا مي آد يه آرايه خالي در نظر مي گيره و محتواي $_session را آرايه خالي در نظر مي گيره، چه اتفاقي مي افته كه وقتي اين حالتو در نظر مي گيره و سپس از session_destroy استفاده مي كنه بدون اين كه بيايم محتواي session ي را با unset خالي كنيم، محتواي اونو خالي مي كنه طبق مثالي كه بالا زدم،
ممنون مي شم جواب بديد فكر كنم دارم به مفهومش نزديك مي شم.

مثل این میمونه


;$ab = 4

$ab;

اینجا مقدار متغیر رو میگیرید و اونجا آرایه

Vahid Faraji
شنبه 30 مرداد 1389, 15:06 عصر
ما يك آرايه خالي را به متغير $_session نسبت مي دهيم، چه اتفاقي مي افته مقادير session ها پاك مي شند؟

bestirani2
شنبه 30 مرداد 1389, 15:48 عصر
ببین
جلسات هم مثل آرایه هست
دیگه نمیدونم چطور بگم
post GET و اینها هم یک آرایه هستند که از قبل توی پی اچ پی تعریف شدند ولی مانند باقی آرایه ها هستند با این تفاوت که یک مقداری رو از سمت سرور میگیرند

Vahid Faraji
شنبه 30 مرداد 1389, 16:01 عصر
ببينيد من يه مثال مي زنم. ببخشيد، اينا رو مي گم. مي دونم شما مسلطي، من قصد جسارت ندارم.

وقتي ما مي گيم $a=array(); ، يعني متغير a رو به صورت آرايه در نظر بگير يعني آرايه اي از حافظه رو براي متغير a در نظر بگير. حالا ما وقتي مي گيم $a[0] = 11 ، مقدار خانه ي اول آرايه رو برابر 11 قرار بده.
حالا ما وقتي مي گيم session["username"] = "ali"; و session["password"] = "123";
به قول شما اين هم آرايه اي است.

من منظورم اين بود وقتي به اين صورت در نظر مي گيريم $_session = array()، ما يه سري خانه هاي خالي را براي متغير $_session در نظر مي گيريم و سپس اونا را destroy مي كنيم. پس تكليف session["username"] و session["password"] چي مي شه؟ كي از بين مي ره؟

bestirani2
شنبه 30 مرداد 1389, 17:34 عصر
ببينيد من يه مثال مي زنم. ببخشيد، اينا رو مي گم. مي دونم شما مسلطي، من قصد جسارت ندارم.

وقتي ما مي گيم $a=array(); ، يعني متغير a رو به صورت آرايه در نظر بگير يعني آرايه اي از حافظه رو براي متغير a در نظر بگير. حالا ما وقتي مي گيم $a[0] = 11 ، مقدار خانه ي اول آرايه رو برابر 11 قرار بده.
حالا ما وقتي مي گيم session["username"] = "ali"; و session["password"] = "123";
به قول شما اين هم آرايه اي است.

من منظورم اين بود وقتي به اين صورت در نظر مي گيريم $_session = array()، ما يه سري خانه هاي خالي را براي متغير $_session در نظر مي گيريم و سپس اونا را destroy مي كنيم. پس تكليف session["username"] و session["password"] چي مي شه؟ كي از بين مي ره؟


اون ها از بین میره
چون یک چیز جدید تعریف کردید
مثلاً یک متعیر رو تعریف میکنی 5 و بعد میگی 2
خوب 5 میره دیگه :لبخند:

Vahid Faraji
شنبه 30 مرداد 1389, 18:25 عصر
شما منظورتون اينه كه، همين كه ما $_session را به صورت يك آرايه خالي در نظر مي گيريم، تمام session هايي كه قبلا تعريف كرديم مثل session['username'] m و غيره، از بين مي ره.
فكر كنم درست فهميدم. ممنون از شما به خاطر صبر و حوصله شما در پاسخگويي.

bestirani2
شنبه 30 مرداد 1389, 18:41 عصر
شما منظورتون اينه كه، همين كه ما $_session را به صورت يك آرايه خالي در نظر مي گيريم، تمام session هايي كه قبلا تعريف كرديم مثل session['username'] m و غيره، از بين مي ره.
فكر كنم درست فهميدم. ممنون از شما به خاطر صبر و حوصله شما در پاسخگويي.

آره
چون یک چیزی روی قبلی تعریف شده

funpatogh
شنبه 30 مرداد 1389, 22:35 عصر
وقتی تابع session_destroy() رو به کار میبری به جلسه خاتمه میدهد و لی تا وقتی که توی اون صفحه
بعد از تابع session_destory() مقادیر سشن ها رو echo کنی هنوز مقادیر حفظ شده هستند و باید حتما یکبار از اون صفحه خارج بشی تا مقادیر حذف بشوند
اگر دقت کنی همیشه دکمه خروج رو میزنی به صفحه اول ارسال میشی
اما اگر می خواهی که توی همون صفحه مقادیر بلافاصله از بین بروند باید قبل از session_destory() تابع session_unset() رو به کار ببری
اینجوری دیگه بعد از تابع هر چی مقادیر رو echo کنی چیزی نمایش نمیدهد چون از بین رفته اند