2012-05-11 3 views
1

ユーザーと管理者が同じフォームを使用してログインできるClassic ASPを使用して作成したシンプルなログインフォームです。その他の条件が実行されていない場合は、ネストされた従来のASP

データベースの「ユーザー」テーブルで、「ステータス」という名前のフィールドをBIT(つまり「0」または「1」)というDATA TYPEという値のフィールドを作成しました。デフォルトでは、登録された新規ユーザーごとに値が「0」になります。

ステータスが「0」の場合、特定のUserまたはAdminをAuthentication.aspページにリダイレクトして、質問に回答し、SUBMITのonclickを使用してデータベースのステータス値を設定するクエリに合格しました「1」に設定する。 "1"は、ユーザーまたは管理者が認証フォームに入力したことを示し、そのユーザーを[認証]ページにリダイレクトせずに目的のページにリダイレクトできます。 If-elseif-elseステートメントを使用しています。私はそれを何度も再チェックしました。私のif-elseステートメントでは欠けているものはないようです。しかし、私は手動でデータベースのステータス列のステータスとして "1"を入力したとしても、常に認証ページにリダイレクトされます。ここに私のコードです。 "&" は、以下を使用し

Session("Username")=request.form("user_name") 
    if request.Form("sub_but") <> "" then 
    sql = "SELECT * FROM Users WHERE UserName='"&request.form("user_name")&"' AND Password='"&request.form("pwd")&"'" 
    rs.open sql, con, 1, 2 
    if rs.EOF then 
      response.Write("<script language='javascript'>{attention_emp();}</script>") 
     else 
     if(rs("status")=1 & rs("login_type")="admin") then 
        Response.Redirect ("admin.asp") 
     elseif(rs("status")=1 & rs("login_type")="emp") then 
         response.Redirect("leave.asp") 
     else 
         response.Redirect("auth.asp") 
     end if 
    end if 

    rs.close 
    end if 
+1

パブリックサイト(または本当に悪意のある内部ユーザーがいる)の場合は、SQLインジェクション攻撃の投稿されたフォーム変数を確認してください(少なくとも何もない場合は一重引用符を置き換えてください)。 – Mirko

答えて

4

を使用しないでください:

VBScriptで
if(rs("status")=1 AND LCase(rs("login_type"))="admin") then 
       Response.Redirect ("admin.asp") 
    elseif(rs("status")=1 AND LCase(rs("login_type"))="emp") then 
        response.Redirect("leave.asp") 
    else 
        response.Redirect("auth.asp") 
    end if 

"&を" 文字列連結演算子ではない論理演算子です。ここにはvbScript operatorsのリストがあります。

EDITまた、文字列比較では大文字と小文字が区別されることに注意してください。比較を変更して、データベース出力を小文字に変換しました。これはまた、あなたの問題の要因になる可能性があります。

また、@Mirkoコメントに注意してください!それでも常に実際の原因を決定する必要がある認証ページにリダイレクトなっている場合は

EDIT 2は、コメント

から明確にします。条件文をハードコーディングすると、条件文が原因であるとみなされます。デバッグのもう1つの方法は、リダイレクトする代わりにステートメントを分割することです。以下を参照してください:

if(rs("status")=1 AND LCase(rs("login_type"))="admin") then 
    Response.Redirect ("admin.asp") 
elseif(rs("status")=1 AND LCase(rs("login_type"))="emp") then 
    response.Redirect("leave.asp") 
else 
    Response.Write "Status: " & rs("status") & "<br />" 
    Response.Write "Is Status 1: " & (rs("status")=1) & "<br />" 
    Response.Write "Login Type: " & rs("login_type") & "<br />" 
    Response.Write "Is Login Type admin: " & (rs("login_type") = "admin") & "<br />" 
    Response.Write "Is Login Type emp: " & (rs("login_type") = "emp") & "<br />" 
end if 

これは、あなたが何をで、どのような文ならば、他/場合にですが判断するのに役立ちます。それを済ませたら、何が起こっているのかをより明確にする必要があります。問題を分離して修正したら、リダイレクトを戻します。

+0

彼はjavascript機能を持つif文は、無効なユーザ名とパスワードを検証することです。ユーザが間違ったユーザ名やパスワードを入力した場合は完全に実行されます。 –

+0

@Mckenziはい "&"はjavascriptの論理演算子です。ここではvbScriptを使用しています。あなたは私の答えに疲れましたか? –

+0

しかし、同じ出力..まだ認証ページにリダイレクト –

関連する問題