表单提交创建的PHP会话变量未持久化

表单提交创建的PHP会话变量未持久化,php,forms,session-variables,Php,Forms,Session Variables,我在XP上运行了Opera12.15,并在XAMPP和localhost上启用了Cookie。没有.htaccess 1) 我不明白为什么下面的会话变量在Opera中不存在,而在其他主流浏览器中却存在。仅使用Opera,如果在接受表单后重新访问页面(通过链接),则会话变量已消失,表单将再次显示。只要刷新页面就可以了(即变量仍然存在) 2) 我还有一个第二个问题,正如你在下面看到的,我打开了一个php标记,启动了一个'if'语句,然后关闭了php标记,输入了一些html,打开了一个新的php标记,

我在XP上运行了Opera12.15,并在XAMPP和localhost上启用了Cookie。没有.htaccess

1) 我不明白为什么下面的会话变量在Opera中不存在,而在其他主流浏览器中却存在。仅使用Opera,如果在接受表单后重新访问页面(通过链接),则会话变量已消失,表单将再次显示。只要刷新页面就可以了(即变量仍然存在)

2) 我还有一个第二个问题,正如你在下面看到的,我打开了一个php标记,启动了一个'if'语句,然后关闭了php标记,输入了一些html,打开了一个新的php标记,关闭了'if',最后关闭了第二个php标记。这是有效的代码吗?我最初被教导在“if”中回显html,并且只有一组php标记?前者更简单,也更有效,我在其他地方看到过

提前谢谢

<?php
// Turn on error reporting
ini_set('display_errors', 1);
error_reporting(E_ALL);

session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">   
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<title>Opera Session Variable</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>
<?php
// create a test variable to confirm other session variables outside of Form are   persisting
$_SESSION['test'] = 'Test';

// function to print session variables
function print_array( $_SESSION )
{
echo '<pre>$_SESSION<br />' . "\n";
print_r($_SESSION);
echo "</pre>\n";
}   

// process the submitted form
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
if (isset($_POST['formaccept'])) {
$_SESSION['formaccepted'] = $_POST['formaccept'];
}
}

// print the session variables
print_array( $_SESSION );

// only display the form if it has not previously been accepted in this session
if (!isset($_SESSION['formaccepted'])) {
?>
<p><b>This parargraph should only display if the form has not been accepted in the current session.</b></p>
<br />
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="submit" name="formaccept" value="Accept" />
</form>
<?php
}
?>

</body>

</html>

Opera会话变量
仅当表单在当前会话中未被接受时,才会显示此参数图



一定是opera处理缓存的方式,我看不出你的代码有任何错误


至于你的第二个问题,这种语法是可行的,但通常不推荐使用,因为它会使布局充满代码片段。

谢谢,这是否意味着我可以使用.htaccess解决这个问题?或者是否有其他方法,我只是不希望表单在同一会话中再次出现?Opera肯定有办法做到这一点吗?我把范围缩小到Opera版本11和12,并且只在XP上。不知道为什么。会话变量确实在Windows7中保持不变。我想你可以将其作为bug提交给Opera,以便他们可以查看它,或者我假设已经有了一个更新的版本,这样你就不必担心了。我确实将其放在了他们的论坛上,没有回应。我有最新的版本,所以它还没有修复。干杯