PHP Conference Japan 2024

session_id

(PHP 4, PHP 5, PHP 7, PHP 8)

session_id获取和/或设置当前会话 ID

描述

session_id(?string $id = null): string|false

session_id() 用于获取或设置当前会话的会话 ID。

常量SID也可用于检索当前名称和会话 ID,这是一个适合添加到 URL 的字符串。另请参见会话处理

参数

id

如果指定了id且不为null,它将替换当前会话 ID。session_id()需要在session_start()之前调用才能达到此目的。取决于会话处理程序,并非所有字符都允许在会话 ID 中使用。例如,文件会话处理程序仅允许[a-zA-Z0-9,-]范围内的字符!

注意 使用会话 Cookie 时,为session_id()指定id将在调用session_start()时始终发送新的 Cookie,无论当前会话 ID 是否与正在设置的会话 ID 相同。

返回值

session_id()返回当前会话的会话 ID,如果没有当前会话(不存在当前会话 ID),则返回空字符串("")。失败时,返回false

变更日志

版本 描述
8.0.0 id现在可以为空。

参见

添加备注

用户贡献的备注 1 条备注

Riikka K
9 年前
最好注意的是,PHP不允许任意会话ID。PHP源代码中的会话ID验证在ext/session/session.c文件中定义,在php_session_valid_key函数中。

https://github.com/php/php-src/blob/master/ext/session/session.c

简而言之,有效的会话ID可以包含数字、字母A到Z(大写和小写)、逗号和短划线。用字符类描述,它将是[-,a-zA-Z0-9]。有效的会话ID的长度可以为1到128个字符。要验证会话ID,最简单的方法是使用类似这样的函数:

<?php

function session_valid_id($session_id)
{
return
preg_match('/^[-,a-zA-Z0-9]{1,128}$/', $session_id) > 0;
}

?>

session_id()本身会欣然接受无效的会话ID,但是如果您尝试使用无效的ID启动会话,您将收到以下错误:

警告:session_start(): 会话 ID 太长或包含非法字符,有效字符为 a-z、A-Z、0-9 和 '-,'
To Top