请问在DELPHI里能直接给asp里的session赋值吗?(100分)

  • 主题发起人 主题发起人 davidlon
  • 开始时间 开始时间
可以在在asp组件里对session赋值
 
可以,用delphi创建asp,注意以下代码未经测试


TYourObj = class(TASPObject, IYourObj)
protected
procedure OnEndPage; safecall;
procedure OnStartPage(const AScriptingContext: IUnknown); safecall;

private
ScriptingContext: IScriptingContext;
Session: ISessionObject;
end;


...

procedure TYourObj.OnStartPage(const AScriptingContext: IUnknown);
begin
ScriptingContext:= AScriptingContext as IScriptingContext;
Session:= ScriptingContext.Session;
Session.Value['key']:= 'value';
...

inherited OnStartPage(AScriptingContext);
end;
 
zhongs:
谢谢!确实可以,我想再问一下,我这个软件
是用delphi做的,但是用到webBrowser控件,则就调用
了某个Asp文件,我想问delphi在前面定义的变量,在Asp
里能调用吗?是用指针吗,我试过,好像也不行。
 
或者Delphi能调用这个组件吗?
怎么调用?
 
New-ActiveX-Active Server object
可写ASP的所有代码
 
一个会话里只有一个session,因此我想在组件里给创建session变量在纯asp里照样
可以使用。
要不你就把变量的值赋给组件的一个属性,然后在asp里调用。
dim abc
set abc=server.createobject("xxx.xxx")
调用abc.xxx便行
 
谢谢大家的关注。
我是用delphi做个软件,其中有用webBrowser调用某个网站。
在这个软件有个登陆界面,符合了就到用webBrower做的浏览器看那个网站,
那个网站其实也是有个登陆页面的,但为了不重复,在前面登陆后,就想
把用户ID和密码写道session里。
我用ActiveX里的asp组件确实能给session赋值,但是这是dll文件,在asp里
调用这个组件的过程,里面需要的参数也是需要从在delphi做的登陆界面取得,
可怎么取得呢?一个是在delphi里,一个是在asp里,变量怎么传递?
 
我给你介绍个比较简单的方法试试能不能解决你的问题

你先把网站的登录界面下载到本地,用户在软件中填入用户名后webbrowser立刻调出登录页
面取得webbrowser的document。通过网页的DOM结构往网页的用户名文本框和密码
文本框赋值。如document.form1.userid.value:=edit1.text;
document.form1.pwd.value:=edit2.text;
然后再调用document.form1.submit()来提交网页。

这其实是用程序模拟了一个网页登录过程,我以前用VB编过一个这样的chinaren的同学录
自动登录软件。
 
网页中跨语言交换数据,Session确实是最简便的方法了
你的DELPHI程序仍可以用我前面说到的方法,导入asp对象写session
 
bnulaw:
应该确实是一个好方法,但具体能说的详细些吗?实在没有这样做过。
是直接WebBrowser1.Document.form1.loginid:=edit1.text;吗?我编译有问题,
我把form1改成WebBrowser1所在的表单了。loginid是asp里登陆id的变量,
又提示找不到此变量。
小天:
是在delphi里调用这个asp对象吗?怎么调?能否给个具体代码?
unit Uasp1;
interface
uses
ComObj, ActiveX, AspTlb, Pasp1_TLB, StdVcl;

type
Tdelpasp = class(TASPObject, Idelpasp)
protected
procedure OnEndPage; safecall;
procedure OnStartPage(const AScriptingContext: IUnknown); safecall;
procedure getsession(var sess1: WideString); safecall;

private
ScriptingContext: IScriptingContext;
Session: ISessionObject;
end;

implementation
uses ComServ;
....

procedure Tdelpasp.OnStartPage(const AScriptingContext: IUnknown);
begin
ScriptingContext:= AScriptingContext as IScriptingContext;
Session:= ScriptingContext.Session;
inherited OnStartPage(AScriptingContext);
end;

procedure Tdelpasp.getsession(var sess1: WideString);
begin
Session.Value['key1']:=sess1;
end;

initialization
TAutoObjectFactory.Create(ComServer, Tdelpasp, Class_delpasp,
ciMultiInstance, tmApartment);
end.

我现在在delphi里怎么调用Asp对象的getsession过程?参数怎么传递啊?
 
1,New-ActiveX-Active Server object
2,Add New Method: getsession
3,Add New Param: sess1

All the source:


unit Unit2;

interface

uses
ComObj, ActiveX, AspTlb, Project1_TLB, StdVcl;

type
Tdelpasp = class(TASPMTSObject, Idelpasp)
protected
procedure getsession(var sess1: OleVariant); safecall;
end;

implementation

uses ComServ;

procedure Tdelpasp.getsession(var sess1: OleVariant);
begin
session.Value['key1']:=sess1;
end;

initialization
TAutoObjectFactory.Create(ComServer, Tdelpasp, Class_delpasp,
ciMultiInstance, tmApartment);
end.
 
小天:
我问的是怎么调用这个过程?即在客户端直接getsession('572849');吗?
程序出错啊,它找不到getsession这个过程
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=563147
 
你指的客户端是ASP吗?ASP程序中使用的例子如下:
<% Set DelphiASPObj = Server.CreateObject("Project1.delpasp")
DelphiASPObj.getsession('572849')
%>
 
小天
你还是在Asp里调用这个asp组件,刚才参数不应该是常量,是在前面
用delphi做的登陆界面里的edit1.text,那么可以
<% Set DelphiASPObj = Server.CreateObject("Project1.delpasp")
DelphiASPObj.getsession('edit1.text')
%>吗?
这时浏览网页时edit1.text是空值,delphi界面的变量并没有传到asp里,
session并没有被赋值。
 
小天
你还是在Asp里调用这个asp组件,刚才参数不应该是常量,是在前面
用delphi做的登陆界面里的edit1.text,那么可以
<% Set DelphiASPObj = Server.CreateObject("Project1.delpasp")
DelphiASPObj.getsession(edit1.text)
%>吗?
这时浏览网页时edit1.text是空值,delphi界面的变量并没有传到asp里,
session并没有被赋值。这就涉及到两种语言能够传递变量吗?
 
后退
顶部