PHP会话 - 登录表单 - 无法登录

时间:2012-12-16 18:43:39

标签: php mysql session login-script

我有一个用户登录的简单脚本。我正在尝试使用会话,以便用户保持登录他浏览网站的任何页面。

我有这些脚本:

如果用户登录或登录,“您现在已登录,则应显示$ user”,但默认为“您尚未登录”。在整个页面中显示。

每当我更改页面或尝试登录时,都不会显示任何错误消息。

可在此处找到最新版本的代码: http://www.mediafire.com/?7n6qo3p4gpkaao4

有人可以帮忙吗?

感谢。

11 个答案:

答案 0 :(得分:5)

session_start()放在页面顶部的<?php之后您需要会话的每个文件中,您应该没问题。您需要在页面上回显任何实际的html之前调用此函数。

阅读php会话文档here

进一步查看您的代码,如果您想限制用户仅在他登录时查看其他页面,请创建一个名为logincheck.php的新文件,其中包含以下内容,并将其包含在每个文件的顶部{ {1}}。在这种情况下,请不要再次使用require_once("logincheck.php");代码。

session_start()

现在你可以使用<?php session_start(); if(isset($_SESSION["username"])){ $welcomeMsg = "<p align='right'>Welcome, </p>" .$_SESSION["username"]; }else{ if(basename($_SERVER["PHP_SELF"])=="index.php") $welcomeMsg = "You are not logged in"; else header("Location:index.php");//will redirect the user to index page if he has not logged in } ?> 并在页面的任何地方回显它,你想要显示错误信息。

希望这有助于回答您的问题。

答案 1 :(得分:2)

form action =“?op = login”method =“POST”action =“login.php”

为什么在表单中使用两次动作?

action =“login.php”只是必需的。

答案 2 :(得分:1)

我没有确切地看到你的问题在哪里,要读的代码太多,但通过查看2个文件(前2个),我注意到一些可能成为问题的东西: Session_id应该标识用户。如果您只是输入一个布尔值(true),我可以通过修改我的HTTP标头轻松打破您网站的用户保留部分。 第二件事是你在回复之前在login.php上放了一个重定向....猜你看不到任何东西......重定向发生在回声之前。 第三件事是你应该绝对地哈希你获得和存储的密码。当人们访问数据库并且没有任何工作时,所有人的密码都是如此令人伤心。

最后一条建议:尝试将Session_Start作为每个文件中的第一个语句......可能就是这样。

答案 3 :(得分:0)

我此时停了下来:

redirect('../TASK2PHP/upload.php');

这个功能是什么,它做了什么?

也许您打算使用http_redirectheaderHttpResponse::redirect ......

答案 4 :(得分:0)

你走了。有很多错误。

http://www.2shared.com/file/A2V_Ztw8/login.html

至少应该让你开始。它也在评论中。我没有使用functions.php文件那里没什么重要的。此外,当您使用此更改dbConfig文件时。

答案 5 :(得分:0)

我编辑了index.php,login.php并设置了会话的工作流程。遵循代码结构,相应地在其他文件中设置会话。 下载以下登录表单rar文件; https://www.box.com/s/1ie9ilp9jgluvokf6say

答案 6 :(得分:0)

您登录方法的代码结构似乎令人困惑,在您重定向之前回显所有内容总是一个好主意,否则httpresponse抱怨它。此外,我建议您首先启用错误报告,在启用错误报告的情况下进行开发总是一个好主意。您可以在login.php中执行此操作,只需放在文件的开头即可。 的的error_reporting(E_ALL);或者将E_ALL设置为1 函数ini_set( '的display_errors', '上');

答案 7 :(得分:0)

TL,DR。但是这篇文章讲的是这种事情的一般设计模式。所有使用PHP客户端身份验证的网站都遵循这种设计。

http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/A_2391-PHP-login-logout-and-easy-access-control.html

您可以复制并粘贴文章中的代码段。如果您对代码的作用有任何疑问,请在此发表评论,我会尽力帮助解释。 〜雷

答案 8 :(得分:0)

希望这可能会有所帮助: 如果会话是空的,你可以调试。

session_id()返回标识当前会话的字符串。如果某个会话尚未初始化,则会返回一个空字符串。

 if(session_id() == '')
 {
      // session has NOT been started
      session_start();
 }
 else
 {
      // session has been started
 }

check session in php if empty

答案 9 :(得分:0)

在index.php文件上创建它,并在用户登录时包含您的页面。并在您包含的每个页面内查看。如果用户未设置,则重定向到登录页面。

示例:

的index.php

if(isset($_SESSION['UserId'])){ 
      //make simple function to get the username from user ID
        $dUserName = getUserName($_SESSION['UserId']);
        echo "wellcome".$dUserName;
        echo "<href='logout.php'>Logout</a>";
}
else{
      echo "<href='login.php'>Logout</a>";
}
if(isset($_GET['page'])){
   $includePage = "includes/".$_GET['page'].".php";
}
else{
     $includePage = "includes/login.php";
}
if(isset($includePage)){
  include($includePage);
} 

从索引

加载示例页面

sample.php

if(isset($_SESSION['user']) && $_SESSION['user'] != ''){
       //show your page
}
else{
      //redirect to login page
      echo '<SCRIPT language="JavaScript">window.location="index.php?page=login";</SCRIPT>';
}

答案 10 :(得分:-1)

我修复了文件......

主要问题在于login.php函数中的loginUser

更改此行:

$sql = "SELECT * FROM users WHERE Username = '$username' AND Password = '$password'";

对此:

$sql = "SELECT * FROM users WHERE Username = '".$username."' AND Password = '".$password."'";

第一行的问题是它正在查找文本'$ username'(和'$ password'而不是变量$username$password

正如您所看到的,解决方案是在变量引用'

之前和之后关闭字符串

P.S。通过使用CodeIgniter等框架来构建您的网站,您将获得巨大收益,除了为您节省大量修复此类错误的时间外,它还更加安全。

如果您需要我上传固定文件,请告诉我。