关于session_start()加上后session数据丢失,有人遇到过吗

风钢我 2016-09-04 08:44:43

<?php
$GLOBALS['_SESSION'] = array();

$GLOBALS['_SESSION']['user_id']="111";

print_r($_SESSION);
echo "<br>";
session_start();
print_r($_SESSION);
?>



为什么我代码中加了一段 session_start();后,print_r 的数据里面的session 数据 就没了,session_start(); 这行代码在之中间起到什么作用呢?这会是什么原因呢,求大神解答。。。迷惑中。。。

$GLOBALS['_SESSION'] 与$_SESSION是同个东西吗。
...全文
236 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
傲雪星枫 2016-09-05
  • 打赏
  • 举报
回复
session_start(); 一般放在页面最前,放中间会丢失上面的缓存。 $GLOBALS['_SESSION'] = array(); $GLOBALS['_SESSION']['user_id']="111"; 这两句之前没有session_start(); 所以没有生效。
xuzuning 2016-09-05
  • 打赏
  • 举报
回复
$_SESSION 是超全局变量,在任何地方都可以直接使用
function foo() {
  $GLOBALS['_SESSION']['aa'] = 1;
  $_SESSION['bb'] = 2;
}
foo();
print_r($_SESSION);
Array
(
    [aa] => 1
    [bb] => 2
)

显然写作 $GLOBALS['_SESSION'] 是多此一举的
风钢我 2016-09-05
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
session_start() 将缓存的 session 数据加载到 $_SESSION 数组中 虽然鼓励创新,但也不能违背客观规律
$GLOBALS['_SESSION'] = array(); $GLOBALS['_SESSION']['user_id']="111"; 那这边赋值得的不进行加载吗
一起混吧 2016-09-05
  • 打赏
  • 举报
回复
引用
$GLOBALS['_SESSION'] 与$_SESSION是同个东西吗。
是同个东西
一起混吧 2016-09-05
  • 打赏
  • 举报
回复
楼主还在纠结这个问题,上贴不是问过了吗,还没搞清楚? $_SESSION 是当前脚本可用 SESSION 变量的数组,session_start 启动后会把session数据填充到$_SESSION数组中去 你没有设置session,所以session数据为空 可以这样理解 $_SESSION在session_start(); 之前只是一个普通变量,设置的值不会存入session数据中。设置session数据要在session_start();启动后才行。
宁不邪 2016-09-05
  • 打赏
  • 举报
回复
session_start()不是应该在使用session之前么?在session_start()后,session会产生一个新的session_id的,所以你会读不到session。
xuzuning 2016-09-05
  • 打赏
  • 举报
回复
session_start() 将缓存的 session 数据加载到 $_SESSION 数组中 虽然鼓励创新,但也不能违背客观规律

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧