PHP会话变量不会改变

时间:2016-10-17 00:48:03

标签: php session redirect login login-attempts

更新:我添加了所有代码;

我想创建一个用于测试目的的登录页面,我在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

2 个答案:

答案 0 :(得分:1)

尝试在session_start();

之后的第一行放置<?php

答案 1 :(得分:1)

我解决了这个问题;

其实我不明白为什么

if(!isset($_SESSION){session_start; $_SESSION['attempt']=3;}

没有用,但当我将此代码修改为该代码时

session_start;
if (!isset($_SESSION['attempt']){$_SESSION['attempt']=3;}

无论如何,谢谢你的阅读。

相关问题