PHP的$_SESSION变量

来源:互联网 发布:格力电器 知乎 编辑:程序博客网 时间:2024/06/05 04:07
        通过为每个独立用户分配唯一的会话 ID,可以实现针对不同用户分别存储数据的功能。 会话通常被用来在多个页面请求之间保存及共享信息。 一般来说,服务器将会话 ID 通过 set_cookie报文头 的方式发送到浏览器,并且在服务器端也是通过会话 ID 来取回会话中的数据。 如果请求中不包含会话 ID 信息(cookie头信息),那么 PHP 就会创建一个新的会话,并为新创建的会话分配新的 ID。

        会话的工作流程很简单。当开始一个会话时,PHP 会尝试从请求中查找会话 ID (通常通过会话 cookie), 会话开始之后,PHP 就会将会话中session文件内的数据设置到 $_SESSION变量中来保存。如果请求中不包含会话 ID 信息,PHP 就会创建一个新的会话,次吃也会设置一个$_SESSION数组,但因为没有session文件,它是空的。  当 PHP 停止的时候,它会自动读取 $_SESSION 中的内容,并将其进行序列化, 然后发送给会话保存管理器器来进行保存。
千万不要使用 unset($_SESSION) 来复位超级变量 $_SESSION, 因为这样会导致无法继续在$_SESSION 中注册会话变量。

Note:

        无论是通过调用函数 session_start() 手动开启会话, 还是使用配置项 session.auto_start 自动开启会话, 对于基于文件的会话数据保存(PHP 的默认行为)而言, 在会话开始的时候都会给会话数据文件加锁, 直到 PHP 脚本执行完毕或者显式调用 session_write_close() 来保存会话数据。 在此期间,其他脚本不可以访问同一个会话数据文件。

        对于大量使用 Ajax 或者并发请求的网站而言,这可能是一个严重的问题。 解决这个问题最简单的做法是如果修改了会话中的变量, 那么应该尽快调用 session_write_close() 来保存会话数据并释放文件锁。 还有一种选择就是使用支持并发操作的会话保存管理器来替代文件会话保存管理器。

        session_unset();释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的session id
        session_destroy() ;删除当前用户对应的session文件以及释放session id,内存中的$_SESSION变量内容依然保留。


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


<?php// 初始化会话。// 如果要使用会话,别忘了现在就调用:session_start();// 重置会话中的所有变量$_SESSION = array();// 如果要清理的更彻底,那么同时删除会话 cookie// 注意:这样不但销毁了会话中的数据,还同时销毁了会话本身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();?> 


0 0
原创粉丝点击