0

我正在学习从一本书中制作一个简单的登录表单,但遇到了一些问题。

当我在浏览器中运行 login.php 脚本并输入正确的用户名和密码(甚至输入错误)..它显示错误

(注意:未定义变量:第 8 行 C:\Program Files (x86)\EasyPHP-DevServer-13.1VC9\data\localweb\rassal\login.php 中的 _SESSION)。

如果我输入了正确的组合,用户就会登录..但仍然会出现相同的通知,并且脚本会重定向回 l​​ogin.php 页面。

如何编辑脚本以使其完美运行?就像它应该接受登录然后进入一个页面(在会话中)。

这是代码

登录.php

<?php
$username = (isset($_POST['username'])) ? $_POST['username'] : '';
$password = (isset($_POST['password'])) ? $_POST['password'] : '';
$redirect = (isset($_REQUEST['redirect'])) ? $_POST['redirect'] : 'secret.php';

if(isset($_POST['submit']))
{
if(!isset($_SESSION['logged']) && $_SESSION['logged']!=1)
{
if(!empty($username) && $username == 'uname' && !empty($password) && $password = 'ppas')
{
$_SESSION['username']=$username;
$_SESSION['logged']=1;
header('Refresh: 5; URL = '.$redirect);
echo "Redirecting";
die();
}
else
{
$_SESSION['username']='';
$_SESSION['logged']=0;
echo "You entered a wrong combination of username and password";
}
}
}
?>
<html>
<head>
<title>Login </title>
</head>
<body>
<form action="login.php" method="post">
<table>
<tr>
<td>Username :</td>
<td><input type="text" name="username" value="<?php echo $username; ?>" /></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password" value="<?php echo $password; ?>" /></td>
</tr>
<tr>
<td><input type="submit" name="submit" value="Log In" /></td>
</tr>
</table>
</form>
</body>
</html>

这是 auth.inc.php

<?php
session_start();

if(!isset($_SESSION['logged']) && $_SESSION['logged']!=1)
{
header('Refresh: 5; URL=login.php?redirect=' . $_SERVER['PHP_SELF']);
echo "You'd be now redirected to the login page ";
}
die();
?>

这是secret.php(用户成功登录时显示的文件)

<?php
require ('auth.inc.php');
?>
<html>
<head>
<title>Logged IN </title>
</head>
<body>
<h2>You're now logged in </h2>
</body>
</html>
4

2 回答 2

2

在激活会话变量之后尝试session_start();在 login.php 的顶部写入 :)<?php

另外,全部更​​换

if(!isset($_SESSION['logged']) && $_SESSION['logged']!=1)

if (!isset($_SESSION['logged']) || $_SESSION['logged']!=1)

以确保您不会调用未定义的索引。

于 2013-07-28T17:03:58.333 回答
0

您还没有开始会话,这就是为什么它在login.php文件中未定义为变量的原因。

在 login.php 文件中使用它:

<?php
session_start(); //use this line in your login.php file at the starting
$username = (isset($_POST['username'])) ? $_POST['username'] : '';

编辑:

<?php
session_start();
if(!isset($_SESSION['logged'])) {
  $_SESSION['logged'] = "";
}

使用此代码。

于 2013-07-28T17:06:01.453 回答