<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/refs.basic.session.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'zh',
  ),
  'this' => 
  array (
    0 => 'book.session.php',
    1 => 'Sessions',
    2 => 'Session 处理',
  ),
  'up' => 
  array (
    0 => 'refs.basic.session.php',
    1 => 'Session 扩展',
  ),
  'prev' => 
  array (
    0 => 'refs.basic.session.php',
    1 => 'Session 扩展',
  ),
  'next' => 
  array (
    0 => 'session.setup.php',
    1 => '安装/配置',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'zh',
    'path' => 'reference/session/book.xml',
  ),
  'history' => 
  array (
  ),
  'extra_header_links' => 
  array (
    'rel' => 'alternate',
    'href' => '/manual/en/feeds/book.session.atom',
    'type' => 'application/atom+xml',
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="book.session" class="book">
 
 <h1 class="title">Session 处理</h1>
 

 
 <div id="intro.session" class="preface">
  <h1 class="title">简介</h1>
  <p class="para">
   会话支持在 PHP 中是在并发访问时由一个方法来保存某些数据。
  </p>
  <p class="para">
   一个访问者访问你的 web 网站将被分配一个唯一的 id，就是所谓的会话 id。
   这个 id 可以存储在用户端的一个 cookie 中，也可以通过 URL 进行传递。
  </p>
  <p class="para">
   会话支持允许你将请求中的数据保存在超全局数组<var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>中。
   当一个访问者访问你的网站，PHP 将自动检查(如果 <a href="session.configuration.php#ini.session.auto-start" class="link">session.auto_start</a>
   被设置为 1）或者在你要求下检查(明确通过 
   <span class="function"><a href="function.session-start.php" class="function">session_start()</a></span>) 当前会话 id 是否是先前发送的请求创建。如果是这种情况，
   那么先前保存的环境将被重建。
  </p>
  <div class="caution"><strong class="caution">警告</strong>
   <p class="para">
    如果你打开了 <a href="session.configuration.php#ini.session.auto-start" class="link">session.auto_start</a> 那么
    将对象放入会话的唯一方法是使用 <a href="ini.core.php#ini.auto-prepend-file" class="link">auto_prepend_file</a>
    来加载定义这个对象的类，其中，在加载的定义的类时，你不得不使用 <span class="function"><a href="function.serialize.php" class="function">serialize()</a></span>
    你得对象，并且事后 <span class="function"><a href="function.unserialize.php" class="function">unserialize()</a></span> 它。
   </p>
  </div>
  <p class="para">
   <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var> (和所有已注册得变量) 将被 PHP 使用内置的序列化方法在请求完成时
   进行序列化。序列化方法可以通过 <a href="session.configuration.php#ini.session.serialize-handler" class="link">session.serialize_handler</a> 
   这个 PHP 配置选项中来设置一个指定的方法。注册的变量未定义将被标记为未定义。在并发访问时，这些变量不会被会话模块
   定义除非用户后来定义了它们。
  </p>
  <div class="warning"><strong class="warning">警告</strong>
   <p class="para">
    因为会话数据是被序列化的，<span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span> 变量不能被存储在会话中。
   </p>
   <p class="para">
    序列化句柄 (<code class="literal">php</code>
    和 <code class="literal">php_binary</code>) 会受到 register_globals 的限制。
    而且，数字索引或者字符串索引包含的特殊字符(<code class="literal">|</code>
    和 <code class="literal">!</code>) 不能被使用。使用这些字符将脚本执行关闭时的最后出现错误。
    <code class="literal">php_serialize</code> 没有这样的限制。
   </p>
  </div>
  <blockquote class="note"><p><strong class="note">注意</strong>: 
   <p class="para">
    请注意当会话工作时，会话的记录并没有被创建
    直到一个变量已经被添加一个新元素到 <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var> 全局数组中。
    这点一直有效，无论是否使用 <span class="function"><a href="function.session-start.php" class="function">session_start()</a></span> 函数
    来开始会话。
   </p>
  </p></blockquote>
 </div>
 

 









 








 







 








 







 









 




 




 




 





<ul class="chunklist chunklist_book"><li><a href="session.setup.php">安装/配置</a><ul class="chunklist chunklist_book chunklist_children"><li><a href="session.requirements.php">需求</a></li><li><a href="session.installation.php">安装</a></li><li><a href="session.configuration.php">运行时配置</a></li></ul></li><li><a href="session.constants.php">预定义常量</a></li><li><a href="session.examples.php">示例</a><ul class="chunklist chunklist_book chunklist_children"><li><a href="session.examples.basic.php">基本用法</a></li><li><a href="session.idpassing.php">传送会话ID</a></li><li><a href="session.customhandler.php">自定义会话处理程序</a></li></ul></li><li><a href="session.upload-progress.php">Session 上传进度</a></li><li><a href="session.security.php">会话和安全</a><ul class="chunklist chunklist_book chunklist_children"><li><a href="features.session.security.management.php">会话管理基础</a></li><li><a href="session.security.ini.php">和会话安全相关的配置项</a></li></ul></li><li><a href="ref.session.php">Session 函数</a><ul class="chunklist chunklist_book chunklist_children"><li><a href="function.session-abort.php">session_abort</a> — Discard session array changes and finish session</li><li><a href="function.session-cache-expire.php">session_cache_expire</a> — 返回/设置当前缓存的到期时间</li><li><a href="function.session-cache-limiter.php">session_cache_limiter</a> — 读取/设置缓存限制器</li><li><a href="function.session-commit.php">session_commit</a> — session_write_close 的别名</li><li><a href="function.session-create-id.php">session_create_id</a> — Create new session id</li><li><a href="function.session-decode.php">session_decode</a> — 解码会话数据</li><li><a href="function.session-destroy.php">session_destroy</a> — 销毁一个会话中的全部数据</li><li><a href="function.session-encode.php">session_encode</a> — 将当前会话数据编码为字符串</li><li><a href="function.session-gc.php">session_gc</a> — Perform session data garbage collection</li><li><a href="function.session-get-cookie-params.php">session_get_cookie_params</a> — 获取会话 cookie 参数</li><li><a href="function.session-id.php">session_id</a> — 获取/设置当前会话 ID</li><li><a href="function.session-module-name.php">session_module_name</a> — 获取/设置会话模块名称</li><li><a href="function.session-name.php">session_name</a> — 读取/设置会话名称</li><li><a href="function.session-regenerate-id.php">session_regenerate_id</a> — 使用新生成的会话 ID 更新现有会话 ID</li><li><a href="function.session-register-shutdown.php">session_register_shutdown</a> — 关闭会话</li><li><a href="function.session-reset.php">session_reset</a> — Re-initialize session array with original values</li><li><a href="function.session-save-path.php">session_save_path</a> — 读取/设置当前会话的保存路径</li><li><a href="function.session-set-cookie-params.php">session_set_cookie_params</a> — 设置会话 cookie 参数</li><li><a href="function.session-set-save-handler.php">session_set_save_handler</a> — 设置用户自定义会话存储函数</li><li><a href="function.session-start.php">session_start</a> — 启动新会话或者重用现有会话</li><li><a href="function.session-status.php">session_status</a> — 返回当前会话状态</li><li><a href="function.session-unset.php">session_unset</a> — 释放所有的会话变量</li><li><a href="function.session-write-close.php">session_write_close</a> — Write session data and end session</li></ul></li><li><a href="class.sessionhandler.php">SessionHandler</a> — The SessionHandler class<ul class="chunklist chunklist_book chunklist_children"><li><a href="sessionhandler.close.php">SessionHandler::close</a> — Close the session</li><li><a href="sessionhandler.create-sid.php">SessionHandler::create_sid</a> — Return a new session ID</li><li><a href="sessionhandler.destroy.php">SessionHandler::destroy</a> — Destroy a session</li><li><a href="sessionhandler.gc.php">SessionHandler::gc</a> — Cleanup old sessions</li><li><a href="sessionhandler.open.php">SessionHandler::open</a> — Initialize session</li><li><a href="sessionhandler.read.php">SessionHandler::read</a> — Read session data</li><li><a href="sessionhandler.write.php">SessionHandler::write</a> — Write session data</li></ul></li><li><a href="class.sessionhandlerinterface.php">SessionHandlerInterface</a> — The SessionHandlerInterface class<ul class="chunklist chunklist_book chunklist_children"><li><a href="sessionhandlerinterface.close.php">SessionHandlerInterface::close</a> — Close the session</li><li><a href="sessionhandlerinterface.destroy.php">SessionHandlerInterface::destroy</a> — Destroy a session</li><li><a href="sessionhandlerinterface.gc.php">SessionHandlerInterface::gc</a> — Cleanup old sessions</li><li><a href="sessionhandlerinterface.open.php">SessionHandlerInterface::open</a> — Initialize session</li><li><a href="sessionhandlerinterface.read.php">SessionHandlerInterface::read</a> — Read session data</li><li><a href="sessionhandlerinterface.write.php">SessionHandlerInterface::write</a> — Write session data</li></ul></li><li><a href="class.sessionidinterface.php">SessionIdInterface</a> — The SessionIdInterface interface<ul class="chunklist chunklist_book chunklist_children"><li><a href="sessionidinterface.create-sid.php">SessionIdInterface::create_sid</a> — Create session ID</li></ul></li><li><a href="class.sessionupdatetimestamphandlerinterface.php">SessionUpdateTimestampHandlerInterface</a> — The SessionUpdateTimestampHandlerInterface interface<ul class="chunklist chunklist_book chunklist_children"><li><a href="sessionupdatetimestamphandlerinterface.updatetimestamp.php">SessionUpdateTimestampHandlerInterface::updateTimestamp</a> — Update timestamp</li><li><a href="sessionupdatetimestamphandlerinterface.validateid.php">SessionUpdateTimestampHandlerInterface::validateId</a> — Validate ID</li></ul></li></ul></div><?php manual_footer($setup); ?>