我正在创建一个网页,只有使用@example.com
或@subdomain.example.com
的用户才能访问该页面。public_html
文件夹具有一个index.php
页面,然后其余内容位于example.com/content
中,因此理想情况下/content
子目录应该不可访问。
这是登录页面的HTML;
<form action="./login.php" method="post">
<input type="text" id="email" placeholder="Enter your work email address." name="email" required=""><br>
<input type="submit">
</form>
login.php
的PHP是;
<?php
$email = 'email@subdomain.example.com';
$domains = array('example.com', 'subdomain.example.com');
$pattern = "/^[a-z0-9._%+-]+@[a-z0-9.-]*(" . implode('|', $domains) . ")$/i";
if (preg_match($pattern, $email)) {
echo '<script>
window.location = "http://example.com/content/"
</script>';
} else {
echo 'This is not a valid Company email address. Please go back and try again.';
}
?>
<?php
$email = $_POST["email"];
$timestamp =date('l jS \of F Y h:i:s A');
$text = "Email: ".$email." At: ".$timestamp."\n";
$file = fopen("./users.txt","a+ \n");
fwrite($file, $text);
fclose($file);
?>
这个想法是,公司人员可以登录,但前提是他们的电子邮件地址与列表匹配,因此我将指定steve@example.com
,igor@example.com
和jon@example.com
所有的人都可以登录。只应授予预定的电子邮件访问权限。如果电子邮件在@
之前和@example.com
之后均有效,则应将用户重定向到example.com/content
,直到他们输入自己的电子邮件后才能访问example.com/content
电子邮件地址。我还将存储一些东西,以便将jon2018@example.com
设为jon2018@example.com = Jon
,以便在页面上打印欢迎消息Hi, Jon
。
人员列表和他们登录的时间保存到.txt
文件中。我只需要弄清楚为什么;
1
当前,无论输入文本框如何,任何人都可以登录。
2
如何将登录限制为仅预定的电子邮件地址,并验证它们是否为有效的电子邮件地址。
3
存储Hi
消息允许的电子邮件地址和名称,尽管可以跳过。
4
确保在某人登录之前/content
不可访问(理想情况下是一条消息,然后重定向到登录页面)。
我知道我也可以实现密码,但是我不具备执行此操作的能力或知识,因此,对我选择的电子邮件方法的任何帮助将不胜感激。我希望我已经对此进行了足够详细的解释。
任何帮助将不胜感激,在此先感谢:)
UPDATE 1
$users = array("jon@example.com", "igor@example.com", "steve@example.com");
if(($users = $users === TRUE){
header("Location: http://example.com/content/");
}else{
die('This is not a valid Company email address. Please go back and try again.');
}
如果我只是基于电子邮件对用户进行身份验证,而不与姓名相关联(即跳过欢迎消息),那么该工作方式将与上面的代码段(包括子域)相似。我只是不能使用SQL,因为它太复杂了。
答案 0 :(得分:0)
尝试使用会话,可以检查here。
您可以重定向到没有javascript的页面,而不是:
echo '<script>
window.location = "http://example.com/content/"
</script>';
使用
header("Location: http://example.com/content/");
首先,您需要类似允许接收电子邮件的数组或数据库之类的东西, 被存储。我建议使用ID,全名,电子邮件的数据库。然后,您可以使用电子邮件简单地对数据库执行sql查询,如果它返回的是真正的重定向,否则返回。示例:(首先建立连接(Google会帮助您),然后执行以下操作:
$sql = "SELECT * FROM users WHERE email=$email;";
if(($result = $dbConnection->query($sql)) === TRUE){
header("Location: http://example.com/content/");
}else{
//use die instead of echo
die('This is not a valid Company email address. Please go back and try again.');
}
并且如果您不想仅使页面可访问,则输入了有效的电子邮件。您基本上可以做同样的事情。单击“提交”按钮后,将在文本框中输入的电子邮件存储起来,如下所示:
$_SESSION['email'] = $email;
在http://example.com/content/
页上。您检查是否允许电子邮件访问此页面。所以:
$sql = "SELECT * FROM users WHERE email=$_SESSION['email']";
if($dbConnection->query($sql) != TRUE){
die("Not allowed to access this page, please enter an email at the Main Page");
//or simply redirect to the mainpage with header();
}else{
//show whatever you want to show
}
使用$ _SESSION要做的就是在每个php页面的顶部包含 session_start(); ! (必须先启动它,然后再进行输出,因此基本上是文件的第一行)
对于“嗨,乔恩”消息,只需进行选择或使用上面的消息,即可重定向到另一页,然后将名称保存到$ _SESSION变量中,如下所示:
$sql = "SELECT * FROM users WHERE email=$email;";
if(($result = $dbConnection->query($sql)) === TRUE){
$data = $result->fetch_assoc();
$_SESSION['Name'] = $data['FullName'];
header("Location: http://example.com/content/");
}else{
//use die instead of echo
die('This is not a valid Company email address. Please go back and try
again.');
}
然后,您可以在http://example.com/content/
上使用$_SESSION['Name']
来访问变量。仅当您在文件开头使用session_start();
时!