在我的index.php文件中,我调用session_start()
并设置了几个会话变量。在第二个PHP文件中,我想访问这些会话变量。
事实上,这个PHP文件纯粹是一个后端脚本,并在触发JavaScript函数时被POST。当POST调用尝试执行第二个PHP文件中的脚本时,错误日志报告:
_SESSION
是一个未定义的变量。
我尝试在第二个PHP文件的顶部调用start_session()
和session_regenerate_id()
,但问题仍然存在。
我假设发生的事情是因为它在POST中这个PHP文件在它自己的会话中,因为我仍然可以执行此操作$_COOKIE[ini_get('session.name')]
。
我试图传递给第二个PHP文件的信息不是任何需要保护的信息,但将来很高兴知道如何做到这一点:通过POST调用PHP文件仍然有我的会话变量。
答案 0 :(得分:54)
关于POST请求和会话没有任何特别之处
您只需要在每个 文件的顶部调用session_start
即可使用会话,就是这样。
再试一次,它应该有用。
答案 1 :(得分:6)
session_start();
是这样的大多数主题的答案。我一直在努力解决这个问题,我用这个代码解决了我的问题
if (version_compare(PHP_VERSION, '5.4.0', '<')) {
if(session_id() == '') {session_start();}
} else {
if (session_status() == PHP_SESSION_NONE) {session_start();}
}
答案 2 :(得分:3)
你必须包括
<?php session_start();?>
在文档的开头,这将启动SESSION ENGINE并使您能够设置会话变量(ie. $_SESSION['var1'], $_SESSION['var2'], etc)
如果您想要从$ _POST获取值,您可以通过以下方式将两者联系起来:
$_SESSION['var1'] = $_POST['answer1']
答案 3 :(得分:3)
我遇到了这个问题,在尝试了很多东西之后,我只是在第二个脚本上包含了session_start()并且它运行了。
答案 4 :(得分:1)
将以下代码添加到文件browse.php中:
error_reporting( error_reporting() & ~E_NOTICE );
if( ! ini_get('date.timezone') )
{
date_default_timezone_set('GMT');
}
if (version_compare(PHP_VERSION, '5.4.0', '<')) {
if(session_id() == '') {session_start();}
} else {
if (session_status() == PHP_SESSION_NONE) {session_start();}
}
它会正常工作。
答案 5 :(得分:0)
我最近也遇到了同样的问题。我无法访问$ _SESSION变量的内容。
1)这是因为在声明session_start();
之前尝试访问$ _SESSION变量。在我自己的情况下,我已经在header.php文件中启动了一个会话。但我在include语句之前访问了$ _SESSION变量。实施例;
<?php
$username = $_SESSION['username'];
//do some logical operation!!!
?>
<?php include("header.php");?>
而不是做这样的事情
<?php include("header.php");?>
<?php
$username = $_SESSION['username'];
//do some logical operation!!!
?>
2)可能导致此问题的另一件事,可能是无法在所有可能需要使用
访问$ _SESSION变量的文件的顶部启动会话session_start();
希望这有助于任何遇到同样问题的人。虽然这是在晚些时候发生的。
答案 6 :(得分:0)
session_start()就是答案。这是另一种解决方法:
<?php
if (session_id() == "")
session_start(); ?>
这将确保仅在您尚未启用当前会话时才启动新会话。正如其他人所说的,当然要确保把它放在HTML的顶部。
答案 7 :(得分:0)
我遇到了这个问题,尝试了不同的方法,终于找到了解决方案:
PHP区分大小写,在所有php文件中使用$ _SESSION而不是$ _session。 示例:
<?php
session_save_path('tmp/'); (is not optional - it is mandatory)
session_start();
echo $_SESSION["s1"]."<br/>";
echo $_SESSION["s2"]."<br/>";
?>