PHP的session_start导致页面找不到
PHP's session_start causes the page to not be found
我有一个基本的 "signup" 页面,我想在其中加载会话变量,以便可以重新填充部分表单。问题是,如果我调用 session_start
,它会导致找不到我的页面:
它甚至没有加载足够我检查任何错误。
我知道这是因为 session_start
因为注释掉对它的调用导致我的页面加载。
这是我的 Apache 日志的输出:
[Fri Jan 29 17:45:21.325743 2016] [mpm_winnt:notice] [pid 5012:tid 544] AH00428: Parent: child process 14060 exited with status 3221225477 -- Restarting.
[Fri Jan 29 17:45:21.964852 2016] [ssl:warn] [pid 5012:tid 544] AH01909: 127.0.0.1:8080:0 server certificate does NOT include an ID which matches the server name
[Fri Jan 29 17:45:22.011733 2016] [mpm_winnt:notice] [pid 5012:tid 544] AH00455: Apache/2.4.18 (Win32) OpenSSL/1.0.2e PHP/7.0.1 configured -- resuming normal operations
[Fri Jan 29 17:45:22.011733 2016] [mpm_winnt:notice] [pid 5012:tid 544] AH00456: Apache Lounge VC14 Server built: Dec 9 2015 10:17:39
[Fri Jan 29 17:45:22.011733 2016] [core:notice] [pid 5012:tid 544] AH00094: Command line: 'c:\xampp\apache\bin\httpd.exe -d C:/xampp/apache'
[Fri Jan 29 17:45:22.011733 2016] [mpm_winnt:notice] [pid 5012:tid 544] AH00418: Parent: Created child process 12716
[Fri Jan 29 17:45:22.666227 2016] [ssl:warn] [pid 12716:tid 552] AH01909: 127.0.0.1:8080:0 server certificate does NOT include an ID which matches the server name
[Fri Jan 29 17:45:22.828422 2016] [ssl:warn] [pid 12716:tid 552] AH01909: 127.0.0.1:8080:0 server certificate does NOT include an ID which matches the server name
[Fri Jan 29 17:45:22.881476 2016] [mpm_winnt:notice] [pid 12716:tid 552] AH00354: Child: Starting 150 worker threads
并且服务器的日志中没有请求。
页面代码:
<?php
error_reporting(E_ALL);
session_start();
if (isset($_SESSION['mismatch'])) {
define('MISMATCH_ERROR', true);
}
if (isset($_SESSION['missing'])) {
define('MISSING_ERROR', true);
}
if (isset($_SESSION['exists'])) {
define('EXISTS_ERROR', true);
}
?>
<!doctype html>
<html>
<head>
<title>Signup Page</title>
<style>
body {
font-size: 150%;
}
label {
display: inline-block;
width: 10em;
}
form {
border: 2px groove darkgreen;
<?php
if (defined('MISSING_ERROR')) {
echo "background-color: red;";
}
?>
}
<?php
if (defined('MISMATCH_ERROR')) {
echo "
input[type='password'] {
background-color: red;
}
";
}
?>
</style>
</head>
<body>
<form method="post" action="handleSignup.php">
<label for="usernameInput">Username:</label>
<input type="text" name="username" />
<br />
<label for="passwordInput">Password:</label>
<input type="password" name="password"/>
<br />
<label for="passwordReInput">Retype Password:</label>
<input type="password" name="passwordRe" />
<br />
<input type="submit" value="Submit" />
<?php
if (defined('EXISTS_ERROR')) {
echo "Username already exists.";
}
?>
</form>
</body>
</html>
我检查了 phpinfo()
,会话已启用。
我正在使用 XAMPP 3.2.2
你如何存储会话?如果在文件中检查会话路径并检查其是否可写。
您还检查 session.gc_*
设置(垃圾收集器)
问题最终出现在 php.ini
中的 session.use_cookies
。默认情况下它是关闭的,尽管它建议启用它,所以我切换它,它现在可以工作了。
修改后别忘了重启服务器。
更新:
由于某种原因,在安装Netbeans 后,问题又出现了。我还需要启用 session.always_use_cookies
才能再次工作。
我有一个基本的 "signup" 页面,我想在其中加载会话变量,以便可以重新填充部分表单。问题是,如果我调用 session_start
,它会导致找不到我的页面:
它甚至没有加载足够我检查任何错误。
我知道这是因为 session_start
因为注释掉对它的调用导致我的页面加载。
这是我的 Apache 日志的输出:
[Fri Jan 29 17:45:21.325743 2016] [mpm_winnt:notice] [pid 5012:tid 544] AH00428: Parent: child process 14060 exited with status 3221225477 -- Restarting.
[Fri Jan 29 17:45:21.964852 2016] [ssl:warn] [pid 5012:tid 544] AH01909: 127.0.0.1:8080:0 server certificate does NOT include an ID which matches the server name
[Fri Jan 29 17:45:22.011733 2016] [mpm_winnt:notice] [pid 5012:tid 544] AH00455: Apache/2.4.18 (Win32) OpenSSL/1.0.2e PHP/7.0.1 configured -- resuming normal operations
[Fri Jan 29 17:45:22.011733 2016] [mpm_winnt:notice] [pid 5012:tid 544] AH00456: Apache Lounge VC14 Server built: Dec 9 2015 10:17:39
[Fri Jan 29 17:45:22.011733 2016] [core:notice] [pid 5012:tid 544] AH00094: Command line: 'c:\xampp\apache\bin\httpd.exe -d C:/xampp/apache'
[Fri Jan 29 17:45:22.011733 2016] [mpm_winnt:notice] [pid 5012:tid 544] AH00418: Parent: Created child process 12716
[Fri Jan 29 17:45:22.666227 2016] [ssl:warn] [pid 12716:tid 552] AH01909: 127.0.0.1:8080:0 server certificate does NOT include an ID which matches the server name
[Fri Jan 29 17:45:22.828422 2016] [ssl:warn] [pid 12716:tid 552] AH01909: 127.0.0.1:8080:0 server certificate does NOT include an ID which matches the server name
[Fri Jan 29 17:45:22.881476 2016] [mpm_winnt:notice] [pid 12716:tid 552] AH00354: Child: Starting 150 worker threads
并且服务器的日志中没有请求。
页面代码:
<?php
error_reporting(E_ALL);
session_start();
if (isset($_SESSION['mismatch'])) {
define('MISMATCH_ERROR', true);
}
if (isset($_SESSION['missing'])) {
define('MISSING_ERROR', true);
}
if (isset($_SESSION['exists'])) {
define('EXISTS_ERROR', true);
}
?>
<!doctype html>
<html>
<head>
<title>Signup Page</title>
<style>
body {
font-size: 150%;
}
label {
display: inline-block;
width: 10em;
}
form {
border: 2px groove darkgreen;
<?php
if (defined('MISSING_ERROR')) {
echo "background-color: red;";
}
?>
}
<?php
if (defined('MISMATCH_ERROR')) {
echo "
input[type='password'] {
background-color: red;
}
";
}
?>
</style>
</head>
<body>
<form method="post" action="handleSignup.php">
<label for="usernameInput">Username:</label>
<input type="text" name="username" />
<br />
<label for="passwordInput">Password:</label>
<input type="password" name="password"/>
<br />
<label for="passwordReInput">Retype Password:</label>
<input type="password" name="passwordRe" />
<br />
<input type="submit" value="Submit" />
<?php
if (defined('EXISTS_ERROR')) {
echo "Username already exists.";
}
?>
</form>
</body>
</html>
我检查了 phpinfo()
,会话已启用。
我正在使用 XAMPP 3.2.2
你如何存储会话?如果在文件中检查会话路径并检查其是否可写。
您还检查 session.gc_*
设置(垃圾收集器)
问题最终出现在 php.ini
中的 session.use_cookies
。默认情况下它是关闭的,尽管它建议启用它,所以我切换它,它现在可以工作了。
修改后别忘了重启服务器。
更新:
由于某种原因,在安装Netbeans 后,问题又出现了。我还需要启用 session.always_use_cookies
才能再次工作。