2013-04-29 1 views
0

XAMPP 및 localhost에서 실행되는 쿠키가있는 XP에서 Opera 12.15를 사용하고 있습니다. .htaccess가 없습니다.양식 제출에 의해 생성 된 PHP 세션 변수

1) 다른 주류 브라우저에서 다음 세션 변수가 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> 

답변

0

오페라가 캐시를 처리하는 방식이어야하므로 코드에 오류가 표시되지 않습니다.

두 번째 질문에 대해서는 문법이 작동하지만 일반적으로 권장되지 않습니다. 레이아웃을 스 니펫으로 가득 채워 버리기 때문입니다.

+0

고마워요. 문제를 극복하기 위해 .htaccess로 뭔가를 할 수 있다는 뜻입니까, 아니면 대체 접근법이 있을까요? 동일한 세션에서 다시 나타나는 양식을 원하지 않습니까? 확실히 오페라는이 일을해야만한다. – martin

+0

필자는 이것을 오페라 버전 11과 12 및 XP에서만 제한했다. 이유는 모르겠다. 세션 변수는 Windows7을 사용하여 지속됩니다. – martin

+0

오페라에 대한 버그로 신고 할 수 있기 때문에 그들이 그것을 볼 수 있거나, 이미 새로운 버전이 나왔다고 가정하고 있으므로 걱정할 필요가 없습니다. – Celestz