由表单提交创建的PHP会话变量不持久

时间:2013-04-29 10:54:58

标签: php forms session-variables

我在XP上安装了Opera 12.15,并在XAMPP和localhost上运行了cookie。没有.htaccess。

1)我无法理解为什么以下会话变量不会在Opera中保留,而在其他主流浏览器中也是如此。仅使用Opera,如果在接受表单后重新访问页面(通过链接),会话变量已经消失,表单将再次显示。如果我只是刷新页面,那就没关系(即变量仍然存在)。

2)我还有一个次要问题,你可以看到下面我已经打开了一个php标签并启动了'if'语句,然后关闭了php标签,输入了一些html,打开了一个新的php标签,关闭了'如果'并最终关闭了第二个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>

1 个答案:

答案 0 :(得分:0)

必须是opera处理缓存的方式,我看不到代码的任何错误。

关于你的第二个问题,这种语法有效,但通常不推荐,因为它会使布局变得充满片段。