我有一个用户登录的简单脚本。我正在尝试使用会话,以便用户保持登录他浏览网站的任何页面。
我有这些脚本:
index.php - http://pastebin.com/yqLtqPRC
login.php - http://pastebin.com/KcQWjfw1
dbConfig.php - http://pastebin.com/GKyfaJJV
upload.php - http://pastebin.com/iMrz3WB8
functions.php - http://pastebin.com/x44KrmxK
如果用户登录或登录,“您现在已登录,则应显示$ user”,但默认为“您尚未登录”。在整个页面中显示。
每当我更改页面或尝试登录时,都不会显示任何错误消息。
可在此处找到最新版本的代码: http://www.mediafire.com/?7n6qo3p4gpkaao4
有人可以帮忙吗?
感谢。
答案 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_redirect或header或HttpResponse::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客户端身份验证的网站都遵循这种设计。
您可以复制并粘贴文章中的代码段。如果您对代码的作用有任何疑问,请在此发表评论,我会尽力帮助解释。 〜雷
答案 8 :(得分:0)
希望这可能会有所帮助: 如果会话是空的,你可以调试。
session_id()
返回标识当前会话的字符串。如果某个会话尚未初始化,则会返回一个空字符串。
if(session_id() == '')
{
// session has NOT been started
session_start();
}
else
{
// session has been started
}
和
答案 9 :(得分:0)
在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);
}
从索引
加载示例页面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等框架来构建您的网站,您将获得巨大收益,除了为您节省大量修复此类错误的时间外,它还更加安全。
如果您需要我上传固定文件,请告诉我。