$_SESSION

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

$_SESSION会话变量

描述

一个关联数组,包含当前脚本可用的会话变量。有关其使用方式的更多信息,请参阅会话函数 文档。

注意

注意:

这是一个“超级全局”或自动全局变量。这意味着它在整个脚本的所有范围内都可用。无需使用 global $variable; 来在函数或方法中访问它。

参见

添加注释

用户贡献的注释 6 个注释

Tugrul
9 年前
创建新会话
==========================
<?php
session_start
();
/* 如果不写这行代码,则无法使用 $_Session 全局变量 */
$_SESSION["newsession"]=$value;
?>
获取会话
==========================
<?php
session_start
();
/* 如果不写这行代码,则无法使用 $_Session 全局变量 */
$_SESSION["newsession"]=$value;
/* 会话已创建 */
echo $_SESSION["newsession"];
/* 会话正在获取 */
?>
更新会话
==========================
<?php
session_start
();
/* 如果不写这行代码,则无法使用 $_Session 全局变量 */
$_SESSION["newsession"]=$value;
/* 这是我的新会话 */
$_SESSION["newsession"]=$updatedvalue;
/* 会话已更新 */
?>
删除会话
==========================
<?php
session_start
();
/* 如果不写这行代码,则无法使用 $_Session 全局变量 */
$_SESSION["newsession"]=$value;
unset(
$_SESSION["newsession"]);
/* 会话已删除。如果您尝试使用它,您将收到错误 */
?>
bohwaz
15 年前
请注意,如果您将 register_globals 设置为 On,与 $_SESSION 变量关联的全局变量将是引用,因此这可能会导致一些奇怪的情况。

<?php

session_start
();

$_SESSION['test'] = 42;
$test = 43;
echo
$_SESSION['test'];

?>

加载页面,显示 42,重新加载页面... 显示 43。

解决方案是在每次执行 session_start() 之后执行此操作

<?php

if (ini_get('register_globals'))
{
foreach (
$_SESSION as $key=>$value)
{
if (isset(
$GLOBALS[$key]))
unset(
$GLOBALS[$key]);
}
}

?>
opajaap at opajaap dot nl
10 年前
在使用 $_SESSION 数组元素时,请注意它们与普通全局变量同名的情况。

以下示例会导致 $wppa 数组元素的行为不可预测,有些元素会通过普通代码更新,有些不会,完全无法预测会发生什么。

<?php
global $wppa;
$wppa = array( 'elm1' => 'value1', 'elm2' => 'value2', ....etc...);

if ( !
session_id() ) @ session_start();
if ( ! isset(
$_SESSION['wppa']) $_SESSION['wppa'] = array();

if ( ! isset(
$_SESSION['wppa']['album']) ) $_SESSION['wppa']['album'] = array();
$_SESSION['wppa']['album'][1234] = 1;

$wppa['elm1'] = 'newvalue1';

print_r($_SESSION);
?>
这很可能会显示 Array ( [wppa] => Array ( [album] => Array ( [1234] => 1 ) [elm1] => 'newvalue1' [elm2] => 'value2' ... etc ...
但是将 $wppa['elm1'] 设置为另一个值或引用它会导致不可预测的结果,可能是 'value1' 或 'newvalue1'。

最奇怪的行为是 $wppa[xx] 中并非所有元素都以 $_SESSION['wppa'][xx] 的形式显示。
jherry at netcourrier dot com
16 年前
如果在键中使用 '|',您可能会遇到问题

$_SESSION["foo|bar"] = "fuzzy";

这对我来说不起作用。我认为这是因为会话对象的序列化使用此字符,因此服务器在无法读取它时会重置您的会话。

要使其正常工作,我将 '|' 替换为 '_'。
charlese at cvs dot com dot au
15 年前
我遇到了会话变量在某些环境中正常工作,而在其他环境中却非常不稳定的问题。我将 $_SESSION 用作数组。当我将 $_SESSION 用作指向数组的指针时,它可以正常工作。例如,以下代码在某些环境中有效,而在其他环境中无效。

<?php
// 如果将 $form_convert 和 $_SESSION['form_convert'] 视为不相关的项,则会遇到麻烦
$form_convert=array();
if (isset(
$_SESSION['form_convert'])){
$form_convert=$_SESSION['form_convert'];
}
}
?>
以下代码运行良好。
<?php
if (isset($_SESSION['form_convert'])){
$form_convert = $_SESSION['form_convert'];
}else{
$form_convert = array();
$_SESSION['form_convert']=$form_convert;
}
?>
ms at meilenstein dot ms
5 年前
我建议谨慎使用 PHP 会话来执行关键任务。到目前为止,我遇到了随机丢失会话数据的令人非常头痛的经历,如以下错误报告所述

https://bugs.php.net/bug.php?id=19022
https://bugs.php.net/bug.php?id=19029
https://bugs.php.net/bug.php?id=70584
To Top