登陆方式:EndUserSessionAdapter、WebUserList、SessionsService+一登陆页面,USERNAME和PW存放在SQL SERVER 2000, 实现登陆验证机制的关键代码如下:procedure TeHRHome.WebUserListBeforeValidateUser(Strings: TStrings;
  var UserID: Variant; var Handled: Boolean);
var
  UserItem:TWebUserItem;
begin
  //从basicinfo,enduser和usergroup表中联合查询出登录用户信息.
  wdm.adqTmp.SQL.Clear;
  wdm.adqTmp.SQL.Add('select b.Empid,b.name,e.password,e.groupid,u.grouptype ');
  wdm.adqTmp.SQL.Add('from basicinfo b,enduser e,usergroup u ');
  wdm.adqTmp.SQL.Add('where e.empid=b.empid and e.groupid=u.groupid and ');
  wdm.adqTmp.SQL.Add('b.name='+#39+Strings.Values['UserName']+#39); //
  wdm.adqTmp.SQL.Add(' and e.password='+#39+Strings.Values['Password']+#39);
  wdm.adqTmp.Open;
  if wdm.adqTmp.RecordCount > 0 then  //验证通过
  begin
    UserID:=Strings.Values['UserName'];    
    {给实例UserItem的Username、Password、AccessRight赋值}
    UserItem:=WebUserList.UserItems.Add as TWebUserItem;
    UserItem.UserName:=Strings.Values['UserName'];
    UserItem.Password:=Strings.Values['Password'];;
    UserItem.AccessRights:=wdm.adqTmp.FieldValues['groupid'];    FEmpId:=Strings.Values['UserName'];         //Public变量
    FGrpId:=wdm.adqTmp.FieldValues['groupid'];    Session.Values['groupid']:=wdm.adqTmp.FieldValues['groupid'];
    Session.Values['empid']:=wdm.adqTmp.FieldValues['empid'];
    Session.Values['name']:=wdm.adqTmp.FieldValues['name'];
    Session.Values['grp']:=wdm.adqTmp.FieldValues['grouptype'];    Handled:=True; //让TWebUserList退出自动验证机制
  end
  else  Handled:=False;
end;在调试器中运行时还算正常,但输入正确的USERNAME和PW后,不能自动跳转到目的页面,需要回到请求页面,重复一次前面的请求操作,才能到达目的页面;
        类型转换为CGI后,在浏览器中运行,输入正确的USERNAME和PW后,已经看到页面出现“WELCOME 某某人”的字样,但一切换到其他页面,字就不见了(调试模式下是所有页面都出现的),请问原因所在??
一旦提出解决方案,即给100分!
(因权力不够,另开贴给100!)

解决方案 »

  1.   

    偶现在很穷,挣分结贴 偶现在很穷,挣分结贴 偶现在很穷,挣分结贴到论坛去看一看
    http://www.envanet.com
    我的论坛,这样说是不是有拉条皮的嫌疑
    不过我确实放了很多高程考试的资料在上面
    好的话,给点分支持一下
      

  2.   

    哈哈,这问题说简单也简单,说复杂也很复杂,你只要转换类型时不要做成CGI的就应该可以了,至于什么原因,我也不知道,问Inprise吧;-}