问题就在于标题说每个页面都在创建php会话。所以,当我想从像这样的会话中获取变量时
session_start();
echo $_SESSION['error'];
它说"未定义索引"。
问题在于,实际上是错误' index定义但不在当前会话中,因为php为每个页面创建了新会话。
我该如何解决这个问题?
注意:我将session_start();
放在每个页面上。第一行,在header("location:error.php")
之前我放session_write_close();
,在标题之后还有die();
方法。我正在使用localhost。使用最新版本的WAMP和JETBRAINS PHPSTORM。
修改---------------------
这是我为错误定义会话的地方(来自login.php页面)
session_start();
$_SESSION['error'] = "Enter both username and password";
header('Location:error.php');
exit;
当上面的代码运行时,会话名为" sess_amvrseubtusk0dpuo4fs35r0q1"已创建并且其中包含此行
error|s:32:"Enter both username and password";
这就是我想要读取会话的地方(这是来自error.php页面)
session_start();
echo 'SESSION: ' . $_SESSION['error'];
当上面的代码运行时,会话名为" sess_m08lf25stbhg75gj2h0n0vose0"已创建且为空。
我在Session目录中创建了所有两个会话文件,因此每个页面都有1个会话文件。
编辑2 ----------------------------------
这是我的php.ini文件 http://pastebin.com/JNsPdzjH
编辑3 ----------------------------------
带有更改的新php.ini文件" c:/ wamp / tmp" to" C:/ Users / nerzid / PhpstormProjects / Deneme / Session"
答案 0 :(得分:1)
根据您originally posted question发布的内容,如果有人想知道的话。
您可能没有为$_SESSION['error']
定义任何内容,至少不是您为代码发布的内容:
session_start();
echo $_SESSION['error'];
您首先需要为其分配一些内容。
例如:
session_start();
$_SESSION['error'] = "Error.";
echo $_SESSION['error'];
然后在后续页面上,检查会话是否设置=> isset()
和/或空=> empty()
或不。{/ p>
即:
if(isset($_SESSION['error']) && !empty($_SESSION['error'])){
echo $_SESSION['error'];
}
else{
echo "Session is not set";
// set a new one
}
如果从变量示例设置会话:
session_start();
$_SESSION['error'] = "Error.";
$error_x = $_SESSION['error'];
echo $error_x;
此外,使用标题时,请添加exit;
header("location:error.php")
exit;
总是
<强> 旁注: 强>
由于您正在使用localhost,请确保该文件夹是可写的。