delphi程序与asp程序共用同一个数据库,可以在本地delphi程序中及服务器的asp程序中分别进行sql操作。本地delphi程序的界面中,有用户名username跟密码password的值。用户名与密码均存放在服务器的sql中,asp程序在服务器上。比如edit1中的值是username,edit2中的值是password,服务器ASP地址是:http://192.168.100.88/admin.asp
我想实现的是:当用户输入正确的用户名密码登录本地delphi系统成功以后,同时会打开地址为:http://192.168.100.88/admin.asp的页面并且由于登录delphi系统的时候,输入了正确的用户名及密码,所以,打开http://192.168.100.88/admin.asp的页面的时候,会自动读取本地cookie,根据相应的cookie用户的权限,进入admin.asp进行操作,而不再需要单独登录admin.asp系统进行操作。也就是delphi系统与asp系统同步登陆。请问这个功能如何实现?谢谢。

解决方案 »

  1.   

    Delphi中的application是个全局变量,session可以利用INI文件...
    session.values['test']:=''; 
      

  2.   

    TIdHttp可以读取本地Cookie和Session.
      

  3.   

    IdHTTP1怎么个读法?3楼的不妨说清楚
      

  4.   


    能否举个例子说明一下,给点代码,谢谢。而且,我不是想让delphi读取asp的cookie,而是想让asp读取delphi传递来的写到cookie里面的值。
      

  5.   

    传值给admin.asp就可以了,至于如何写Session,那是ASP服务器做的事情,Session是服务端对象
      

  6.   

    比如这样:(用的ASPX,其实与ASP道理是一样的)admin.aspx.cs
        private int checkUser(string name, string pswd)
        {
            Session["UserName"] = name;
            Session["PassWord"] = pswd;
            if (name == "admin1" && pswd == "truepswd") return 1;
            if (name == "admin2" && pswd == "truepswd") return 2;
            return 0;
        }    protected void Page_Load(object sender, EventArgs e)
        {
            int Power = checkUser(Request["name"] != null ? Request["name"].ToString() : "", Request["pswd"] != null ? Request["pswd"].ToString() : "");
            Response.Write("<div>名字:" + Session["UserName"].ToString() + "</div>");
            Response.Write("<div>密码:" + Session["PassWord"].ToString() + "</div>");
            Response.Write("<div>权限:" + Power.ToString() + "</div>");
        }
    Delphi中打开admin.aspx页面:(这是用QueryString明传密码演示的)
    uses ShellAPI;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShellExecute(0,'open','http://192.168.100.88/admin.aspx?name=admin1&pswd=truepswd',nil,nil,SW_SHOWNORMAL);
    end;
      

  7.   

    权限最好在服务端验证,而不是根据客户端的cookie决定权限
      

  8.   

    方法1、delphi用QueryString放帐号、密码来打开asp工作页面,
    不过,此url容易被复制重用(帐号、密码使用密文也一样可以被复制重用)方法2、delphi用QueryString放帐号、密码来“隐藏”访问一个特定的asp页面,返回一个此asp生成的随机数
    再用QueryString放随机数来打开asp工作页面(此页面能查询到特定页面生成并暂存的随机数来判断querystring的随机数是否有效,判断完即删除此随机数)
    这个url就不怕复制,因为无法重用
      

  9.   

    ASP的代码已经固定了,我不可能再去修改ASP的代码了。我只是想要asp读取delphi在我本地生成的session,来实现自动登录的验证。
      

  10.   

    回复楼主10楼:1、你说的session,是ASP服务器上的session吗?如果是,那它就不在本地的Delphi程序进程里2、无论你是从本地读cookie,还是Edit.Text,还是你说的“session”,都需要由Delphi程序用HTTP请求时捎带QueryString等形式,提交到ASP服务器,实现自动登陆的效果3、既然ASP服务端代码已不可能更改,那就要分析现有的ASP代码,看它是如何接收客户端传来的登陆信息的,然后遵照它的规则,用2所说的方法实现。4、ASP一定不会主动读取你本地的信息的,它只会接受HTTP请求,返回HTML给客户端的浏览器(例外:长连接虽然看起来是由服务端主动向客户端发送更新数据,但实际上它仍然是在响应客户端的HTTP请求)
      

  11.   


    是的,我说的session是asp的谢谢各位,我再研究研究,多弄几回测试测试去。
      

  12.   

    楼主的要求估计无法实现,你可以通过SHELLEXECUTE的方法来打开一个网页,并将用户名密码传递过去,如楼上ShellExecute(0,'open','http://192.168.100.88/admin.aspx?name=admin1&pswd=truepswd',nil,nil,SW_SHOWNORMAL);
    end;为了安全,可以将那二个值进行加密,传到网页,ASP再解密好了
      

  13.   


    谢谢,这样做可以,我也明白了。但是还有个问题。就是ShellExecute(0,'open','http://192.168.100.88/admin.aspx?name=admin1&pswd=truepswd',nil,nil,SW_SHOWNORMAL);中,用户名跟密码的值admin1与truepswd是变量,比如我要从edit1,edit2中取,这个要怎么写呢?我写成:ShellExecute(0,'open','http://192.168.100.88/admin.aspx?name='''+edit1.text+'''&pswd='''+edit2.text+'''',nil,nil,SW_SHOWNORMAL);则提示错误。
      

  14.   

    那么,如何将这个设置为读取edit中的数值呢?
      

  15.   

    回15、16楼:ShellExecute(0,'open',PChar('http://192.168.100.88/admin.aspx?name='+edit1.text+'&pswd='+edit2.text),nil,nil,SW_SHOWNORMAL);
      

  16.   

    可以拼成字符串,然后再PCHAR,楼上老刀已回复