我在WebUserList的onBeforeValidateUser事件中写如下代码:
procedure THome.WebUserListBeforeValidateUser(Strings: TStrings;
  var UserID: Variant; var Handled: Boolean);
var
   UserNo,pswd:string;
begin
   UserNo:=Strings.Values['UserName'];
   pswd:=Strings.Values['PassWord'];
   with Dm.ADOQuery1 do
   begin
       close;
       with sql do
       begin
          clear;
          add('select * from UserMem');
          add('Where Useno='+UserNo);
          add('and pwd='+pswd);
          open;
       end;
   end;
   if DM.ADOQuery1.RecordCount>0 then
   begin
       UserID:=UserNo;//验证通过
       Handled:=true;
       Session.Values['UserName']:=UserNo;
   end
   else
       Handled:=false;
end;
在LoginFormaAdapter的onlogin事件中写如下代码:
procedure TLogin.LoginFormAdapter1Login(Sender: TObject; UserID: Variant);
var
   UserNo,pswd:string;
begin
   UserNo:=Request.ContentFields.Values['UserName'];
   pswd:=Request.ContentFields.Values['PassWord'];
   if UserNo='' then
   begin
      Session.UpdateResponse(Response);
      Response.SendRedirect('/ShowQx.dll/ShowMsg?Msg=请输入用户号');
      exit;
   end;
   if pswd='' then
   begin
      Session.UpdateResponse(Response);
      Response.SendRedirect('/ShowQx.dll/ShowMsg?Msg=请输入密码');
      exit;
   end;
   with Dm.ADOQuery1 do
   begin
       close;
       with sql do
       begin
          clear;
          add('select * from UserMem');
          add('Where Useno='+UserNo);
          add('and pwd='+pswd);
          open;
       end;
   end;
   if DM.ADOQuery1.RecordCount>0 then
   begin
      Session.UpdateResponse(Response);
      Response.SendRedirect('/ShowQx.dll/ShowMsg?Msg=登陆成功');
      exit;
   end;
   if Dm.ADOQuery1.RecordCount=0 then
   begin
      session.UpdateResponse(Response);
      Response.SendRedirect('/ShowQx.dll/ShowMsg?Msg=用户名或密码错误');
      exit;
   end;
end;
但这里的问题是若用不正确的UserName和PassWord登陆时,却出现错误信息“Unkown UserName”,为何?(我已经对错误的登陆做了相应处理啊)
还有问题就是Strings.Values['UserName'],Strings.Values['PassWord']的意义?

解决方案 »

  1.   

    1。不要用 Response.SendRedirect 重定向,会丢失会话(Session)
    改用:DispatchPageName 或 RedirectToPageName
    2。有没有加入 SessionService、 EndUserSessionAdapter、WebUserList 组件?
    3。Strings.Values['UserName'] 
      如果 Strings 中有一行 “UserName=MyName”
      则 Strings.Values['UserName'] 的值为 'MyName'
      

  2.   

    SessionService、 EndUserSessionAdapter、WebUserList 组件都加入了,但LoginFormAdapter1Login这个事件却不起作用,比如对UserName、password的错误处理,
    这是为何呢?