百科狗-知识改变命运!
--

session_destroy() - php 会话函数session

百变鹏仔1年前 (2023-11-21)阅读数 25#技术干货
文章标签数据

session_destroy()

(PHP 4, PHP 5, PHP 7)

销毁一个会话中的全部数据

说明

session_destroy(void): bool

session_destroy()销毁当前会话中的全部数据,但是不会重置当前会话所关联的全局变量,也不会重置会话 cookie。如果需要再次使用会话变量,必须重新调用session_start()函数。

Note:通常情况下,在你的代码中不必调用session_destroy()函数,可以直接清除$_SESSION 数组中的数据来实现会话数据清理。

为了彻底销毁会话,必须同时重置会话 ID。如果是通过 cookie 方式传送会话 ID 的,那么同时也需要调用setcookie()函数来删除客户端的会话 cookie。

session_destroy() - php 会话函数session

当启用了session.use_strict_mode配置项的时候,你不需要删除过期会话 ID 对应的 cookie,因为会话模块已经不再接受携带过期会话 ID 的 cookie 了,然后它会生成一个新的会话 ID cookie。建议所有的站点都启用session.use_strict_mode配置项。

Warning

过早的删除会话中的数据可能会导致不可预期的结果。例如,当存在从 JavaScript 或者 URL 链接过来的并发请求的时候,某一个请求删除了会话中的数据,会导致其他的并发请求无法使用会话数据。

虽然当前的会话处理模块不会接受为空的会话 ID,但是由于客户端(浏览器)的处理方式,立即删除会话中的数据可能会导致生成为空的会话 cookie,进而导致客户端生成很多不必要的会话 ID cookie。

为了避免这种情况的发生,你需要在$_SESSION 中设置一个时间戳,在这个时间戳之后的对于会话的访问都将被拒绝。或者,确保你的应用中不存在并发请求。这个规则同样适用于session_regenerate_id()。session_regenerate_id()also.

返回值

成功时返回TRUE,或者在失败时返回FALSE

范例

销毁会话数据以及$_SESSION

注释

Note:

对于旧版本中不使用$_SESSION的代码,仅能使用session_unset()来完成会话销毁工作。

参见

  • session.use_strict_mode
  • session_reset()Re-initialize session array with original values
  • session_regenerate_id() 使用新生成的会话 ID 更新现有会话 ID
  • unset() 释放给定的变量
  • setcookie() 发送 Cookie
If you want to change the session id on each log in, make sure to use session_regenerate_id(true) during the log in process.

[Edited by moderator (googleguy at php dot net)]
It took me a while to figure out how to destroy a particular session in php. Note I'm not sure if solution provided below is perfect but it seems work for me. Please feel free to post any easier way to destroy a particular session. Because it's quite useful for functionality of force an user offline.
1. If you're using db or memcached to manage session, you can always delete that session entry directly from db or memcached.
2. Using generic php session methods to delete a particular session(by session id). 
I'm using PHP 7.1 and received the following warning when implementing Example #1, above:
  PHP message: PHP Warning: session_destroy(): Trying to destroy uninitialized session in...
What I discovered is that clearing $_SESSION and removing the cookie destroys the session, hence the warning. To avoid the warning while still keeping the value of using session_destroy(), do this after everything else:
  if (session_status() == PHP_SESSION_ACTIVE) { session_destroy(); }

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)