الفرق بين المراجعتين لصفحة: «PHP/session destroy»
رؤيا-بنعطية (نقاش | مساهمات) لا ملخص تعديل |
لا ملخص تعديل |
||
سطر 10: | سطر 10: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
تُدمر الدالة جميع البيانات المُصاحبة للجلسة الحالية. ولا تقوم بمسح أيًا مِن المُتغيرات العامة (global variables) أو ملفات تعريف الارتباط للدالة. ولاستخدام المُتغيرات مُجددًا، يجب استخدام الدالة <code>[[ | تُدمر الدالة جميع البيانات المُصاحبة للجلسة الحالية. ولا تقوم بمسح أيًا مِن المُتغيرات العامة (global variables) أو ملفات تعريف الارتباط للدالة. ولاستخدام المُتغيرات مُجددًا، يجب استخدام الدالة <code>[[PHP/session start|()session_start]]</code>. | ||
ملاحظة: لست | ملاحظة: لست مضطرًا لاستدعاء الدالة <code>[[PHP/session destroy|session_destroy()]]</code> في الكود العادي. نظف المصفوفة <code>$_SESSION</code> بدلًا مِن تدمير بيانات الجلسة. | ||
لتدمير الجلسة كلها يجب مسح معرّف الجلسة وإذا كان | لتدمير الجلسة كلها يجب مسح معرّف الجلسة وإذا كان محفوظًا في ملف تعريف الارتباط، يجب مسحه كذلك، ويُمكن استعمال الدالة <code>[[PHP/setcookie|setcookie()]]</code> لذلك. | ||
عند تفعيل <code>session.use.strict_mode</code>، لا يلزم مسح ملف تعريف الارتباط الخاص بمعرّف الجلسة لأن وحدة الجلسة بطبعها لا تقبل ملف تعريف الارتباط الخاص بمعرّف الجلسة وستضبط | عند تفعيل <code>session.use.strict_mode</code>، لا يلزم مسح ملف تعريف الارتباط الخاص بمعرّف الجلسة لأن وحدة الجلسة بطبعها لا تقبل ملف تعريف الارتباط الخاص بمعرّف الجلسة وستضبط معرّفًا جديدًا. | ||
تفعيل <code>session.use_strict_mode</code> مُحبذ لكُل المواقع. | تفعيل <code>session.use_strict_mode</code> مُحبذ لكُل المواقع. | ||
تحذير: على الرغم من أن وحدة الجلسة الحالية لا تقبل ملف تعريف ارتباط فارغ للجلسة ، إلا أن الحذف الفوري للجلسة قد يؤدي إلى ملف تعريف ارتباط فارغ بسبب حالة السباق الجانبية للعميل (المتصفح). سيؤدي ذلك إلى أن العميل سينشئ أكثر من معرف للجلسة دون داع. ولتجنب ذلك يجب ضبط المُدة الزمنية للمسح في المُتغير <code>$_SESSION</code> ورفض أي دخول لاحق. أو تأكد أن البرنامج لا يحتوي على أي طلبات متزامنة للمعرّف، وهذا ينطبق على الدالة <code>[[ | تحذير: على الرغم من أن وحدة الجلسة الحالية لا تقبل ملف تعريف ارتباط فارغ للجلسة ، إلا أن الحذف الفوري للجلسة قد يؤدي إلى ملف تعريف ارتباط فارغ بسبب حالة السباق الجانبية (side race condition) للعميل (المتصفح). سيؤدي ذلك إلى أن العميل سينشئ أكثر من معرف للجلسة دون داع. ولتجنب ذلك يجب ضبط المُدة الزمنية للمسح في المُتغير <code>$_SESSION</code> ورفض أي دخول لاحق. أو تأكد أن البرنامج لا يحتوي على أي طلبات متزامنة للمعرّف، وهذا ينطبق على الدالة <code>[[PHP/session regenerate id|session_regenerate_id()]]</code> أيضًا. | ||
== القيم | == القيم المعادة == | ||
تُعيد الدالة <code>session_destroy()</code> القيمة <code>TRUE</code> في حالة | تُعيد الدالة <code>session_destroy()</code> القيمة <code>TRUE</code> في حالة نجاحها، والقيمة <code>FALSE</code> عدا ذلك. | ||
== أمثلة == | == أمثلة == | ||
المثال 1: تدمير الدالة بواسطة المُتغير <code>$_SESSION</code><syntaxhighlight lang="php"> | المثال 1: تدمير الدالة بواسطة المُتغير <code>$_SESSION</code><syntaxhighlight lang="php"> | ||
<?php | <?php | ||
// session_name(“anyName”) بدء الجلسة – لا تنس إذا كُنت أعطيت الجلسة اسمًا | // session_name(“anyName”) بدء الجلسة – لا تنس إذا كُنت أعطيت الجلسة اسمًا | ||
session_start(); | session_start(); | ||
// فك ضبط جميع مُتغيرات الدالة | // فك ضبط جميع مُتغيرات الدالة | ||
$_SESSION = array(); | $_SESSION = array(); | ||
// إذا كُنت تريد تدمير الجلسة وجب تدمير ملفات الارتباط | // إذا كُنت تريد تدمير الجلسة وجب تدمير ملفات الارتباط | ||
// لاحظ أن الدالة سوف تمسح الجلسة كاملةً وليس مُجرد البيانات | // لاحظ أن الدالة سوف تمسح الجلسة كاملةً وليس مُجرد البيانات | ||
if (ini_get("session.use_cookies")) { | if (ini_get("session.use_cookies")) { | ||
$params = session_get_cookie_params(); | $params = session_get_cookie_params(); | ||
setcookie(session_name(), '', time() - 42000, | setcookie(session_name(), '', time() - 42000, | ||
$params["path"], $params["domain"], | $params["path"], $params["domain"], | ||
$params["secure"], $params["httponly"] | $params["secure"], $params["httponly"] | ||
); | ); | ||
} | } | ||
// تدمير الجلسة بالنهاية | // تدمير الجلسة بالنهاية | ||
session_destroy(); | session_destroy(); | ||
?> | ?> | ||
</syntaxhighlight>لاحظ أن الدالة <code>[[PHP/session unset|session_unset()]]</code> تُستعمل في الأكواد القديمة التي لا تستخدم <code>$_SESSION</code>. | |||
</syntaxhighlight>لاحظ أن الدالة <code>[[ | |||
== انظر أيضًا == | == انظر أيضًا == | ||
* الدالة <code>[[PHP/session reset|session_reset()]]</code>: تُعيد بدء الدالة بقيمها الأصلية. | |||
* الدالة <code>[[ | * الدالة <code>[[PHP/session regenerate id|session_regenerate_id()]]</code>: تحدث المعرف الفريد الحالي للجلسة باستخدام رقم مُستحدث. | ||
* الدالة <code>[[ | |||
* الدالة <code>[[PHP/unset|unset()]]</code>: تزيل ضبط مُتغير مُعطى بالفعل. | * الدالة <code>[[PHP/unset|unset()]]</code>: تزيل ضبط مُتغير مُعطى بالفعل. | ||
* الدالة <code>[[ | * الدالة <code>[[PHP/setcookie|setcookie()]]</code>: تُرسل ملفات تعريف الارتباط . | ||
= مصادر = | == مصادر == | ||
* [http://php.net/manual/en/function.session-destroy.php صفحة الدالة session_destroy في توثيق PHP الرسمي.] | * [http://php.net/manual/en/function.session-destroy.php صفحة الدالة session_destroy في توثيق PHP الرسمي.] | ||
[[تصنيف:PHP]] | [[تصنيف:PHP]] | ||
[[تصنيف:PHP Function]] | |||
[[تصنيف:PHP Session]] | [[تصنيف:PHP Session]] |
مراجعة 11:30، 18 أغسطس 2018
(PHP 4, PHP 5, PHP 7)
تدمر الدالة session_destroy()
جميع البيانات المُسجلة في الجلسة.
الوصف
bool session_destroy ( void )
تُدمر الدالة جميع البيانات المُصاحبة للجلسة الحالية. ولا تقوم بمسح أيًا مِن المُتغيرات العامة (global variables) أو ملفات تعريف الارتباط للدالة. ولاستخدام المُتغيرات مُجددًا، يجب استخدام الدالة ()session_start
.
ملاحظة: لست مضطرًا لاستدعاء الدالة session_destroy()
في الكود العادي. نظف المصفوفة $_SESSION
بدلًا مِن تدمير بيانات الجلسة.
لتدمير الجلسة كلها يجب مسح معرّف الجلسة وإذا كان محفوظًا في ملف تعريف الارتباط، يجب مسحه كذلك، ويُمكن استعمال الدالة setcookie()
لذلك.
عند تفعيل session.use.strict_mode
، لا يلزم مسح ملف تعريف الارتباط الخاص بمعرّف الجلسة لأن وحدة الجلسة بطبعها لا تقبل ملف تعريف الارتباط الخاص بمعرّف الجلسة وستضبط معرّفًا جديدًا.
تفعيل session.use_strict_mode
مُحبذ لكُل المواقع.
تحذير: على الرغم من أن وحدة الجلسة الحالية لا تقبل ملف تعريف ارتباط فارغ للجلسة ، إلا أن الحذف الفوري للجلسة قد يؤدي إلى ملف تعريف ارتباط فارغ بسبب حالة السباق الجانبية (side race condition) للعميل (المتصفح). سيؤدي ذلك إلى أن العميل سينشئ أكثر من معرف للجلسة دون داع. ولتجنب ذلك يجب ضبط المُدة الزمنية للمسح في المُتغير $_SESSION
ورفض أي دخول لاحق. أو تأكد أن البرنامج لا يحتوي على أي طلبات متزامنة للمعرّف، وهذا ينطبق على الدالة session_regenerate_id()
أيضًا.
القيم المعادة
تُعيد الدالة session_destroy()
القيمة TRUE
في حالة نجاحها، والقيمة FALSE
عدا ذلك.
أمثلة
المثال 1: تدمير الدالة بواسطة المُتغير $_SESSION
<?php
// session_name(“anyName”) بدء الجلسة – لا تنس إذا كُنت أعطيت الجلسة اسمًا
session_start();
// فك ضبط جميع مُتغيرات الدالة
$_SESSION = array();
// إذا كُنت تريد تدمير الجلسة وجب تدمير ملفات الارتباط
// لاحظ أن الدالة سوف تمسح الجلسة كاملةً وليس مُجرد البيانات
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
// تدمير الجلسة بالنهاية
session_destroy();
?>
لاحظ أن الدالة session_unset()
تُستعمل في الأكواد القديمة التي لا تستخدم $_SESSION
.
انظر أيضًا
- الدالة
session_reset()
: تُعيد بدء الدالة بقيمها الأصلية. - الدالة
session_regenerate_id()
: تحدث المعرف الفريد الحالي للجلسة باستخدام رقم مُستحدث. - الدالة
unset()
: تزيل ضبط مُتغير مُعطى بالفعل. - الدالة
setcookie()
: تُرسل ملفات تعريف الارتباط .