【发布时间】:2016-10-17 00:48:02
【问题描述】:
更新:我添加了所有代码;
我想创建一个用于测试目的的登录页面,并在 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
【问题讨论】:
-
显示完整的代码,而不仅仅是您认为相关的代码。
-
你做了
session_start()吗? -
你的 control.php 中有
session_start()吗?仅通过一些 sn-ps 就很难知道。 -
任何使用
$_SESSION的脚本必须以session_start()开始 -
此外,每次进入登录页面时,尝试次数都会重置为 3。您应该开始会话,然后检查是否设置了
$_SESSION['attempt']。
标签: php session redirect login login-attempts