2009-06-03 74 views
4

假设我正在构建一个Web应用程序,其用户页面位于http://example.com/NAME。确保用户名与保留字不冲突的最佳方式是什么(例如'about','contact'等)?我可以想到两种方法:确保用户名不是保留字的最佳方式是什么?

  • 在我的代码的某个地方维护一个列表。这很好,但意味着如果我决定将“about”页面更改为“aboutus”,我还需要编辑另一段代码。
  • 请求URI(例如http://example.com/someusername)并检查它是否存在(不返回404)。这种感觉有点像黑客,但另一方面,它确实完成了它应该做的事情。另一方面,如果不制作一个页面,我不能保留任何内容。

什么是最好的方式去做这件事?手动验证用户名不是一种选择。谢谢!

编辑:我忘了提,用户名走在根部,像这样:

http://example.com/USERNAME

不喜欢这样的:

http://example.com/users/USERNAME

因此,我为什么要问这个问题。这是出于技术原因,不要问。

+0

是否有可能让用户页面的URL为http://www.example.com/users/NAME?这会解决你的问题吗? – Sean 2009-06-03 08:42:12

+0

不,我必须从技术角度出发解决问题。 – 2009-06-03 08:43:24

回答

2

为了完整性,如果你不能改变路由。另一种可能是让你的用户路线和你的非用户路线有一个程序化的区别。例如,如果您在每条用户路线的末尾附加了'_',则可以确保用户位于:http://example.com/NAME_,而其他路线永远不会结束'_'

1

你只知道这些'保留'字是什么。所以最好保留一个列表并根据它进行验证。

另一种方法是,如果您使用CMS,那么所有这些keywods'about','contact'等将会出现在您的数据库中。根据它进行验证。

2

如何更改路由方案以使用户位于example.com/users/NAME?

0

您可以随时查看并了解stackoverflow.com的工作原理。

+0

这将是“使用不符合问题的URI方案” – Quentin 2009-06-03 08:52:53

+0

在问题完全提出之前,我似乎回答了。 – quamrana 2009-06-04 13:53:24

1

如何首先创建虚拟账户与所有保留字?只列出所有可能的并创建它们。

如果使用

www.example.com/user/name 

那么就不会有问题,但它似乎像你想的URL短。

5

我强烈建议您改用http://example.com/users/NAME之类的独特路径。否则,如果你想添加一个保留字,但是用户已经把它作为他们的用户名,你会怎么做?最终会出现各种潜在的迁移问题。

或者,如果您必须拥有一些直接脱离http://example.com/的内容,您可能会加前缀所有用户名吗?那么那个用户jerryjvl会翻译成链接http://example.com/user_jerryjvl

如果确实没有其他可能的解决方案,那么我会说要检查用户名,以防止任何数据源确定'保留字'是什么,或者在某处包含所有保留的查找文件/表/结构话。

1

右边的文本框东西例如:“请使用您的个人昵称或您的真实姓名,用户名和表示与网站管理相关的常用词可能会被撤销。”

1

在我的代码中维护一个列表。这很好,但意味着如果我决定将“about”页面更改为“aboutus”,我还需要编辑另一段代码。

你的菜单应该存储在一个数组/列表中。这样,你只有1段代码可以编辑,而不是2. =]

然后,由于所有菜单都在一个数组中,因此可以将用户名与数组中的元素进行匹配。 例如

$menu = array('About', 'Contact', 'Home') 
if(in_array($username, $menu)) { 
    echo 'invalid username' 
} 
2

我维护代码中的保留字。 这是我在http://postbit.com/网站上使用,以检查是否usernamename是保留字的PERL代码:

# Black list of logins and sub-domains reserved keywords 
my @black_list = qw(
    about access account accounts add address adm admin administration 
    adult advertising affiliate affiliates ajax analytics android anon 
    anonymous api app apps archive atom auth authentication 
    ... 
); 

my $username_normalized = lc($username); 
    $username_normalized =~ s/\W//gs; # 'log-in' -> 'login' 

for my $this_username (@black_list) { 
    if ($username_normalized eq $this_username) { 
    die("This username is already taken. Please choose other username.\n"); 
    } 
} 

保留名称的完整列表(如“CSS”,“图片”,“JS”, 'admin','root','old','test','www','admin','login','devel'...)以超过300个登录用户名登录:

http://blog.postbit.com/reserved-username-list.html

相关问题