【发布时间】:2012-10-29 04:09:24
【问题描述】:
我希望能够将像<anythinghere>@domain3.com 这样的全局用户名设置为 $usernames 数组中的用户名值(在下面的代码中)。这样我就可以根据域重定向用户,已经“认证”了。
我将在下面的代码中放置示例。
我可以在$X = <anything-so-long-as-not-blank>@domain3.com 处执行类似$usernames = array("username@domain1.com", $X) 的操作吗?
完整代码如下:
<?php
//VALIDATE USERS
$usernames = array("username@domain1.com", "username2@domain1.com", "username3@domain1.com", "username1@domain2.com", "username2@domain2.com", "username1@domain3.com");
$passwords = array("password1", "password2", "password3", "password4", "password5", "password6");
//REDIRECT SPECIFIC VALID USERS OR DOMAIN
function get_page($username) {
$username = strtolower($username);
switch ($username) {
case "username@domain1.com" : return "http://www.google.com";
case "username2@domain1.com" : return "http://www.yahoo.com";
case "username3@domain1.com" : return "http://www.stackoverflow.com";
case "username1@domain2.com" : return "http://www.serverfault.com";
}
return preg_match('/@domain3\.com$/',$username) ?
"http://www.backblaze.com" : "DefaultBackupPage.php";
}
$page = get_page($_POST['username']);
for($i=0;$i<count($usernames);$i++)
{
$logindata[$usernames[$i]]=$passwords[$i];
}
$found = 0;
for($i=0;$i<count($usernames);$i++)
{
if ($usernames[$i] == $_POST["username"])
{
$found = 1;
}
}
if ($found == 0)
{
header('Location: login.php?login_error=1');
exit;
}
if($logindata[$_POST["username"]]==$_POST["password"])
{
session_start();
$_SESSION["username"]=$_POST["username"];
header('Location: '.$page);
exit;
}
else
{
header('Location: login.php?login_error=1');
exit;
}
?>
@inhan 已经像冠军一样帮助了我。我想知道是否有人可以让我过线?干杯!
【问题讨论】:
-
您的逻辑似乎有些奇怪。你想提供一个带有通配符的用户名,这很公平——但你想匹配什么?
-
所以我想要一个用户名,它可以在@domain.com 之前包含任何文本来匹配。然后重定向用户名的部分可以重定向有效的用户名。不将地址发送到错误页面。所以基本上我正在验证一个域。但它必须是 $username 数组中的一个值,否则我必须重写所有内容! (我不允许这样做)