session_start
(PHP 4, PHP 5)
session_start — 启动新会话或者重用现有会话
说明
bool session_start
( void
)
session_start() 会创建新会话或者重用现有会话。 如果通过 GET 或者 POST 方式,或者使用 cookie 提交了会话 ID, 则会重用现有会话。
当会话自动开始或者通过 session_start() 手动开始的时候, PHP 内部会调用会话管理器的 open 和 read 回调函数。 会话管理器可能是 PHP 默认的, 也可能是扩展提供的(SQLite 或者 Memcached 扩展), 也可能是通过 session_set_save_handler() 设定的用户自定义会话管理器。 通过 read 回调函数返回的现有会话数据(使用特殊的序列化格式存储), PHP 会自动反序列化数据并且填充 $_SESSION 超级全局变量。
要想使用命名会话,请在调用 session_start() 函数 之前调用 session_name() 函数。
如果启用了 session.use_trans_sid 选项, session_start() 函数会注册一个内部输出管理器, 该输出管理器完成 URL 重写的工作。
如果用户联合使用 ob_start() 和 ob_gzhandler 函数, 那么函数的调用顺序会影响输出结果。 例如,必须在开始会话之前调用 ob_gzhandler 函数完成注册。
返回值
成功开始会话返回 TRUE
,反之返回 FALSE
更新日志
版本
说明
5.3.0
如果函数调用失败返回 FALSE
,
之前版本返回了 TRUE
。
4.3.3
在 PHP 4.3.3 中,
会话开始之后调用 session_start() 函数
会引发 E_NOTICE
级别的错误,
并且第二次请求开始会话的调用会被忽略。
范例
Example #1 会话示例: page1.php
<?php
// page1.php
session_start();
echo 'Welcome to page #1';
$_SESSION['favcolor'] = 'green';
$_SESSION['animal'] = 'cat';
$_SESSION['time'] = time();
// 如果使用 cookie 方式传送会话 ID
echo '<br /><a href="page2.php">page 2</a>';
// 如果不是使用 cookie 方式传送会话 ID,则使用 URL 改写的方式传送会话 ID
echo '<br /><a href="page2.php?' . SID . '">page 2</a>';
?>
请求 page1.php 页面之后,
第二个页面 page2.php
会包含会话数据。
请查阅 会话参考
获取更多关于 会话 ID 传送的信息,
在该参考页面中有关于常量 SID
的详细说明。
Example #2 会话示例: page2.php
<?php
// page2.php
session_start();
echo 'Welcome to page #2<br />';
echo $_SESSION['favcolor']; // green
echo $_SESSION['animal']; // cat
echo date('Y m d H:i:s', $_SESSION['time']);
// 类似 page1.php 中的代码,你可能需要在这里处理使用 SID 的场景
echo '<br /><a href="page1.php">page 1</a>';
?>
注释
Note:
要使用基于 cookie 的会话, 必须在输出开始之前调用 session_start() 函数。
Note:
建议使用 zlib.output_compression 来替代 ob_gzhandler()。
Note:
根据配置不同,本函数会发送几个 HTTP 响应头。 参考 session_cache_limiter() 来自定义 HTTP 响应头。
参见
$_SESSION session.auto_start 配置指示 session_id() - 获取/设置当前会话 ID