此登录脚本

时间:2013-07-28 16:56:31

标签: php

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

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

  

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

如果我输入正确的组合,则用户已登录..但仍会显示相同的通知,并且脚本会重定向回login.php页面。

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

以下是代码

的login.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>

2 个答案:

答案 0 :(得分:2)

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

另外,全部替换

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

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

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

答案 1 :(得分: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'] = "";
}

使用此代码。