【问题标题】:PHP session variable won't changePHP会话变量不会改变
【发布时间】: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


【解决方案1】:

尝试将session_start(); 放在第一行,在&lt;?php 之后

【讨论】:

  • 之后的第一行
  • 如果你看一下第一行,你会看到 if 语句中有 session_start() 代码。
  • 我的意思是改变 if (!isset($_SESSION)) { session_start(); $_SESSION['尝试']=3; } 到 session_start(); if (!isset($_SESSION)) { $_SESSION['attempt']=3; }
【解决方案2】:

我已经解决了这个问题;

其实我不明白为什么

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 2012-08-03
    • 2013-05-01
    • 2011-06-09
    • 2023-03-21
    • 2018-02-04
    相关资源
    最近更新 更多