1

I have a simple script where a user logs in. I am trying to use sessions, so that a user remains logged in on whatever page he browses through the website.

I have these scripts:

If the user logs in or is logged in, 'You are now logged in, $user' is supposed to be shown, but the default 'You are not logged in.' displays throughout the pages.

No error messages are shown whenever I change page or try to log in.

Latest version of the code can be found here: http://www.mediafire.com/?7n6qo3p4gpkaao4

Can anyone help please?

thanks.

4

11 回答 11

5

将 放在session_start()您需要会话的每个文件的页面顶部,然后就<?php可以了。您需要在页面上回显任何实际 html 之前调用此函数。

在此处阅读 php 会话文档

进一步查看您的代码,如果您想限制用户仅在登录后才能查看其他页面,则创建一个名为logincheck.php以下内​​容的新文件,并将其包含在每个文件的顶部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
}
?>

现在你可以$welcomeMsg在页面上任何你想显示错误消息的地方使用和回显它。

希望这有助于回答您的查询。

于 2012-12-21T09:16:05.320 回答
2

表单 action="?op=login" 方法="POST" action="login.php"

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

action="login.php" 只是必需的。

于 2012-12-16T19:11:07.080 回答
1

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

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

于 2012-12-16T18:54:41.203 回答
0

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

于 2012-12-21T08:26:36.777 回答
0

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

例子 :

索引.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);
} 

从索引加载示例页面

示例.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>';
}
于 2012-12-26T10:37:05.863 回答
0

我停在了这一点上:

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

那是什么功能,它有什么作用?

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

于 2012-12-16T18:53:59.117 回答
0

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

于 2012-12-20T11:41:14.557 回答
0

干得好。有很多错误。

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

这至少应该让你开始。一路上也有评论。我没有使用 functions.php 文件,里面没有什么重要的。此外,当您使用它时,相应地更改您的 dbConfig 文件。

于 2012-12-16T20:33:33.300 回答
0

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

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

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

于 2012-12-22T17:32:41.600 回答
0

希望这可能会有所帮助:您可以调试会话是否为空。

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

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

如果为空,则检查 php 中的会话

于 2012-12-26T04:27:45.357 回答
-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

如您所见,解决方案是在变量引用之前和之后关闭字符串'

PS 使用诸如 CodeIgniter 之类的框架来构建您的网站,您将获得巨大的收益,除了可以节省您大量修复此类错误的时间之外,它也更加安全。

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

于 2012-12-24T21:21:32.127 回答