Login 是否使用结构向登录信息添加变量?
我正在尝试使用一个结构来安排三组登录和密码。理想情况下,我希望form.password和form.username检查结构userOne到userThree的变量,而不仅仅是检查密码和用户名的一个实例 有人能告诉我实现这一目标所需了解/了解的方向吗 先谢谢你Login 是否使用结构向登录信息添加变量?,login,coldfusion,passwords,Login,Coldfusion,Passwords,我正在尝试使用一个结构来安排三组登录和密码。理想情况下,我希望form.password和form.username检查结构userOne到userThree的变量,而不仅仅是检查密码和用户名的一个实例 有人能告诉我实现这一目标所需了解/了解的方向吗 先谢谢你 <cfset userOne = structNew()> <cfset userOne.name = "cat"> <cfset userOne.password = "meow"> <cfse
<cfset userOne = structNew()>
<cfset userOne.name = "cat">
<cfset userOne.password = "meow">
<cfset userOne.group = "1">
<cfset userTwo = structNew()>
<cfset userTwo.name = "bird">
<cfset userTwo.password = "chirp">
<cfset userTwo.group = "2">
<cfset userThree = structNew()>
<cfset userThree.name = "mouse">
<cfset userThree.password = "squeak">
<cfset userThree.group = "3">
<cfset this_password = "squeak">
<cfif form.password neq "squeak" or form.username neq "mouse">
<cflocation url="login.cfm?status=le">
<cfelse>
<cflock scope="session" timeout="10">
<cfset session.valid_user = "yes">
</cflock>
<cflocation url="index.cfm" addtoken="no">
</cfif>
这会起作用,但有点乱。我希望这只是你的问题的一个例子,而不是它是如何工作的。如果你可以将你的3个用户结构嵌套在一个用户结构中,按名称键入,那么你可以执行
structKeyExists()
来查找匹配的用户,然后只需检查密码。堆比逐个在多个结构上循环更快
例如
用户={
cat={name:“cat”,密码:“meow”,组:1},
bird={name:“bird”,密码:“chirp”,组:2},
鼠标={名称:“鼠标”,密码:“吱吱”,组:3}
};
如果(
structKeyExists(形式为“用户名”)
&&structKeyExists(形式为“密码”)
&&len(form.username和form.password)>0
&&structKeyExists(用户,form.username)
&&structKeyExists(用户[表单.用户名],“密码”)
&&用户[form.username].password==form.password
) {
//签入
}
否则{
//抛出错误“无效的用户名或密码”
}
这里有另一种处理方法:
<cfscript>
users = [{
username = "cat",
password = "meow"
},{
username = "bird",
password = "chirp"
},{
username = "mouse",
password = "squeak"
}];
for (user in users) {
if (user.username == form.username && user.password == form.password) {
// handle success log in
// redirect
}
}
// handle invalid log in
// redirect
</cfscript>
用户=[{
username=“cat”,
password=“喵喵”
},{
username=“bird”,
password=“chirp”
},{
用户名=“鼠标”,
password=“squeak”
}];
for(用户中的用户){
if(user.username==form.username&&user.password==form.password){
//处理成功登录
//重定向
}
}
//处理无效的登录
//重定向
感谢您的意见。你所说的工作原理是什么意思?我最终希望将一个用户限制为服务器上的一个文件夹,而其他两个用户可以访问整个站点,但首先希望建立三个用户及其登录名。我的意思是,在代码中定义用户很麻烦。此外,在执行if语句时,如果先是真的情况,然后是假的情况,通常可读性更高一些。但你的逻辑是正确的。我希望我的帖子能对你有所帮助。
<cfscript>
users = {
cat = { name: "cat", password: "meow", group: 1 },
bird = { name: "bird", password: "chirp", group: 2 },
mouse = { name: "mouse", password: "squeak", group: 3 }
};
if (
structKeyExists( form, 'username' )
&& structKeyExists( form, 'password' )
&& len( form.username & form.password ) > 0
&& structKeyExists( users, form.username )
&& structKeyExists( users[form.username], 'password' )
&& users[form.username].password == form.password
) {
// sign them in
}
else {
// throw error "invalid username or password"
}
</cfscript>
<cfscript>
users = [{
username = "cat",
password = "meow"
},{
username = "bird",
password = "chirp"
},{
username = "mouse",
password = "squeak"
}];
for (user in users) {
if (user.username == form.username && user.password == form.password) {
// handle success log in
// redirect
}
}
// handle invalid log in
// redirect
</cfscript>