更新:我添加了所有代码;
我想创建一个用于测试目的的登录页面,我在php会话中包含了尝试号码。问题是会话的变量没有改变。
index.php
<?php
if (!isset($_SESSION)) {
session_start();
$_SESSION['attempt']=3;
}
if ($_SESSION['attempt']<0){
header('location:login_error.php');
}
require('../function/start.php');
$title = 'Login';
require('../template/header.php');
$ip = !empty($_SERVER['HTTP_CLIENT_IP']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
var_dump($_SESSION['attempt'])
?>
<h3 class="epad_header">Login</h3>
<div id="epad_wrapper">
<div id="ad_form_wrapper">
<form action="control.php" method="POST">
<fieldset>
<span class="formtext">ID</span>
<input type="text" name="epadName" id="epadName" required>
<span class="formtext">Pass</span>
<input type="password" name="epadPass" id="epadPass" required>
<input type="submit" value="Ok" class="formbuton" name="formbuton">
<br>
<span class="formtext">IP Adress : <?php echo $ip; ?></span>
<br>
<span class="formtext">Attempt : <?php echo $_SESSION['attempt'] ?></span>
</fieldset>
</form>
</div>
</div>
<?php require('../template/footer.php'); ?>
control.php
<?php
if (!isset($_SESSION)) {
session_start();
}
require('../function/start.php');
$title = 'Control';
if (isset($_POST['formbuton'])){
$name = htmlentities($_POST['epadName']);
$pwd = htmlentities($_POST['epadPass']);
}
$check = $db->prepare('SELECT user, pass FROM users');
$check->execute();
$result = $check->fetch(PDO::FETCH_ASSOC);
$user = $result['user'];
$pass = $result['pass'];
if ($name == $user && $pwd == $pass ){
$_SESSION['name']= $name;
header("location:main.php");
}else{
$_SESSION['attempt']--;
header('location:index.php');
}
?>
当用户进入页面时(第一次访问);将启动会话,并将创建尝试变量。 (的index.php)
如果输入错误数据,尝试变量将减少。 (control.php)
如果有3个失败的尝试页面将重定向到login_error.page(index.php)
第一个问题:会话变量没有改变。
第二个问题:即使我输入正确的数据,页面也会指向index.php(登录区域)而不是main.php
答案 0 :(得分:1)
尝试在session_start();
<?php
答案 1 :(得分:1)
我解决了这个问题;
其实我不明白为什么
if(!isset($_SESSION){session_start; $_SESSION['attempt']=3;}
没有用,但当我将此代码修改为该代码时
session_start;
if (!isset($_SESSION['attempt']){$_SESSION['attempt']=3;}
无论如何,谢谢你的阅读。