因此,我建立了我的第一个使用注册和登录的网站,并使用php和mysql实施。我的问题是,如果用户获得了他在通过登录页面后访问的页面的URL,他目前能够将这些页面复制并粘贴到URL中并绕过登录。登录并绕过登录屏幕
问题:有什么办法可以确保实际登录发生?
我的主机000Webhost(免费)允许文件夹被密码保护,但我不知道如何或如果我可以将此绑定到我的用户数据库。
这是我在这个问题上提出的第一个问题..请客气一点。
因此,我建立了我的第一个使用注册和登录的网站,并使用php和mysql实施。我的问题是,如果用户获得了他在通过登录页面后访问的页面的URL,他目前能够将这些页面复制并粘贴到URL中并绕过登录。登录并绕过登录屏幕
问题:有什么办法可以确保实际登录发生?
我的主机000Webhost(免费)允许文件夹被密码保护,但我不知道如何或如果我可以将此绑定到我的用户数据库。
这是我在这个问题上提出的第一个问题..请客气一点。
是的,有一些简单的方法可以检查用户是否登录,最好的方法是使用超全球性的$_SESSION
。当你使用session superglobal时,你基本上是将信息保存到服务器上,并且保存特定用户的信息,同时在用户计算机上保存一个cookie,只要会话有效(通常是30分钟) 。用简单的英语,php开发人员制作了一个超全球化的版本,基本上使开发人员可以非常容易地“维护状态”,而无需执行极端数量的代码。
这就是你将如何使用session superglobal。在您的网站的每一个页面的顶部,你将有代码(甚至高于<!DOCTYPE html>
)此部分:
<?php session_start(); ?>
这样做(很多其他事情中)有什么节省用户计算机上的cookie识别他在会议有效期间独一无二。 现在...用户已经登录后进入的页面上,你将有类似下面的代码:
<?php
$username = $_POST['username'];//obtaining username from form
$password = $_POST['password'];//obtaining password from form
// i did not include any encryption code in this example
// so that the example is easier to understand, but keep in mind
// that encrypting your users passwords is super important
//for security reasons, I used prepared statements and binding parameters
//to compare the password and username obtained from the form with
//those in the database (in order to prevent sql injection):
$sql = "SELECT 1 FROM users WHERE username = :username AND password = :password LIMIT 1";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);
$stmt->execute();
if ($stmt->rowCount()>0)//if a row was found, then you know this user exists
{
//here I am saving information in the session super global that
//can be used to not only identify if a user is logged in on each
//page, but also to see which user is logged in, since often
//you want to give a user his own control panel or other features.
$_SESSION['authenticated'] = TRUE;
$_SESSION['username'] = htmlspecialchars($username);
}
?>
现在每一个页面,你有,你将包括下列代码上:
<?php
if (isset($_SESSION['authenticated']))
{
echo "Hello there ".$_SESSION['username']."!<br>";
}
?>
之前的代码会回显“Hello there John!”之类的东西。如果用户名是John。从这里,你可以在你想要的内容中包含你想要的内容的任何代码,只需要用户登录就可以看到因此,没有登录的用户将无法查看该网站的哪一部分,即使他们会看到这些网站徽标以及其他不在条件内的其他所有内容。此外,以前的代码不一定非要在最上面,只需要<?php session_start(); ?>
,这是由于HTTP协议工作原因。
让我知道这是否有帮助,或者如果您有任何其他问题。
好吧,我也试过这个,并且得到以下错误:致命错误:调用第14行第14行中的/home/a4049291/public_html/frontpage.html中的非对象的成员函数prepare()是 - $ stmt = $ connection-> prepare($ sql);新手是否有课程? – Paul
Webeng上面的答案有你需要的大部分内容,但是你需要看看你是如何建立数据库连接的,这样你才能正确地使用你准备好的语句。查找PDO或mysqli数据库连接。
他完全正确地使用SESSION变量来跟踪用户是否已登录,以及有关使用SQL的预准备语句。
我会改变他答案的一件事是每页的顶部。我反而利用这一点,因此,如果用户没有在页面加载时,他们被送回登录页面登录:
if (!isset($_SESSION['username'])) { header("Location: login.php"); }
发布此她:http://stackoverflow.com/questions/37234576/php-setting-the-session-information-in-a-cookie-wont-be-after-page-reload – Munsterlander
@Paul对我的回答有帮助吗? – Webeng