2024年PHP开发者大会日本站

$_SESSION

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

$_SESSION会话变量

描述

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

备注

注意:

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

参见

添加备注

用户贡献的备注 3条备注

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
16年前
请注意,如果您将register_globals设置为On,则与$_SESSION变量关联的全局变量是引用,因此这可能会导致一些奇怪的情况。

<?php

session_start
();

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

?>

加载页面,OK,它显示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
11年前
当您拥有与普通全局变量相同的名称时,请小心处理$_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]。
To Top