Php 会话值不会重置
我使用html、jquery、css和php创建了一个表单。 我定义了session['level'],即每个级别,session['level']的值将加上一,然后包括下一页。 但是,我遇到了一个问题。 如果我刷新页面,会话['level']值保持不变,当我再次单击“new_form”按钮时,其跳过级别。 我想做的是,如果用户刷新页面,它将保持在原来的级别,而不会返回index.php,并且不可能跳过级别。 我怎么做? 非常感谢你的帮助。谢谢Php 会话值不会重置,php,Php,我使用html、jquery、css和php创建了一个表单。 我定义了session['level'],即每个级别,session['level']的值将加上一,然后包括下一页。 但是,我遇到了一个问题。 如果我刷新页面,会话['level']值保持不变,当我再次单击“new_form”按钮时,其跳过级别。 我想做的是,如果用户刷新页面,它将保持在原来的级别,而不会返回index.php,并且不可能跳过级别。 我怎么做? 非常感谢你的帮助。谢谢 <?php session_sta
<?php
session_start();
?>
<html>
<head>
</head>
<body>
<!--The form is here..-->
<?php
if (!array_key_exists('level', $_SESSION)) {
$_SESSION['level'] = 1;
if(isset($_POST['submit'])) {
include ('page2.php');
}
} elseif ($_SESSION['level'] == 1) {
$_SESSION['level'] = 2;
if (isset($_POST['submit'])) {
include ('page3.php');
}
}elseif ($_SESSION['level'] == 2) {
$_SESSION['level'] = 3;
if (isset($_POST['submit'])) {
include ('page4.php');
}
} elseif ($_SESSION['level'] == 3) {
$_SESSION['level'] = 4;
if (isset($_POST['submit'])) {
include ('page5.php');
}
}
?>
<footer>
<form action="index.php" method="post">
<input type="button" name="new_form" class="btn btn-primary btn-new" onclick="show();" /><br>
<input type="button" class="btn btn-default btn-new" />
</form>
</div>
<img src="footer.png">
</footer>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-form-validator/2.2.8/jquery.form-validator.min.js"></script>
<script> $.validate(); </script>
<script>
function show() {
$('#if-1-1').fadeIn(800);
}
</script>
</body>
</html>
$.validate();
函数show(){
$('if-1-1')。法代因(800);
}
问题在于刷新页面时,会话
值未保存。您可以在表单中添加隐藏字段,然后重置级别值,但请记住隐藏字段可能被劫持
<?php
$level = 1;
if (array_key_exists('level', $_SESSION)) $level = $SESSION['level'];
?>
<input type="hidden" name="level" value="<?php echo $level;?>"/>
编辑:我明白你的意思,最好是使用之前的解决方案,你可以提高级别以防止劫持,但如果你想要快速解决方案,请使用此代码。这是一个丑陋的补丁,但它应该做的把戏
<?php
if (!array_key_exists('level', $_SESSION)) {
$_SESSION['level'] = 1;
if(isset($_POST['submit'])) {
include ('page2.php');
}
} else{
if (!isset($_POST) && $SESSION['level'] > 1) {
$SESSION['level'] = $SESSION['level'] - 1;
}
if ($_SESSION['level'] == 1) {
$_SESSION['level'] = 2;
if (isset($_POST['submit'])) {
include ('page3.php');
}
}elseif ($_SESSION['level'] == 2) {
$_SESSION['level'] = 3;
if (isset($_POST['submit'])) {
include ('page4.php');
}
} elseif ($_SESSION['level'] == 3) {
$_SESSION['level'] = 4;
if (isset($_POST['submit'])) {
include ('page5.php');
}
}
}
?>
但无论如何,您都应该进行其他检查,以查看字段是否正确,它们是否应该通过级别。您的代码只是假设页面的任何加载都是“转到下一页”操作。因此,任何更新都会向前推进。您需要指出页面加载是如何发生的,并且只在明确请求下一页时才向前移动。e、 g.
,而它们位于page.php?page=2
。如果他们重新加载,他们只会再次获得第2页。如果他们单击链接,则会前进到第3页session_start();如果(!empty($_会话['level']){echo$_会话['level'];}
?Marc B我希望url在所有级别都是index.php,因为我在“下一页”按钮中使用了“包含而非链接”按钮。您的表单是如何提交的?您没有“提交”按钮。您需要经常澄清这一点。在什么情况下,您希望推进?在提交时,现在甚至无法进行?developerjk我在其他页面中有提交按钮,我首先使用jquery在index.php中使用buttonThanks隐藏和显示表单。我以前使用过这个按钮,但我注意到正如你所说的,它可能会被黑客攻击,这就是为什么我没有使用hidden Input的原因。考虑到他在表单上甚至没有提交按钮,我认为这个答案有点过早。我理解你知道的,试试另一个技巧,它可能会起作用。如果他们跳过一个级别,然后减去一个级别进入会话。
<?php
if (!array_key_exists('level', $_SESSION)) {
$_SESSION['level'] = 1;
if(isset($_POST['submit'])) {
include ('page2.php');
}
} else{
if (!isset($_POST) && $SESSION['level'] > 1) {
$SESSION['level'] = $SESSION['level'] - 1;
}
if ($_SESSION['level'] == 1) {
$_SESSION['level'] = 2;
if (isset($_POST['submit'])) {
include ('page3.php');
}
}elseif ($_SESSION['level'] == 2) {
$_SESSION['level'] = 3;
if (isset($_POST['submit'])) {
include ('page4.php');
}
} elseif ($_SESSION['level'] == 3) {
$_SESSION['level'] = 4;
if (isset($_POST['submit'])) {
include ('page5.php');
}
}
}
?>