我是IntraWeb的新手,遇到了一个问题。为了实现登录表单,我在用户会话中存储了数据集。但是当涉及到访问数据集时,我会遇到访问冲突错误。我发现,Useresession并没有创建。现在我有点困惑,因为在Intraweb纪录片中,据说Usersession是由ServerController自动创建的。
我访问(分别希望)数据集如下UserSession.Dataset.open;
我使用Rad Studio XE5中包含的IntraWeb试用版。这可能是问题所在吗?如果这不是问题所在,我如何手动创建用户会话?
非常感谢
[编辑13.4.16]
问题出在我使用的评估版本上。安装完整版本后,我的问题消失了。他们通过添加另一个参数更改了Usersession.create过程。因此,如果你有同样的问题,请确保使用实际版本:感谢所有回复
您需要在会话中创建"数据"
procedure TIWServerController.IWServerControllerBaseNewSession(
ASession: TIWApplication; var VMainForm: TIWAppForm);
begin
ASession.Data := TUserSession.Create;
end;
注意在这个例子中
TUserSession
是用户定义的类
type
TUserSession = class
public
UserCount: Integer;
end;
看看这个教程,它解释了如何在IW-http://etutorials.org/Programming/mastering+delphi+7/Part+IV+delphi+Internet+和+a+.NET+预览/Chapter+21+Web+编程+with+IntraWeb/Building+IntraWeb+应用程序/
或查阅atozed提供的技术文档。
我试着只添加了一个注释,显然我需要更多的分数。如果你进入澳大利亚储备银行给出的回复,就会找到答案,但这里是缩写:
IW会自动创建和管理用户会话。然而,TIWUserSession只是你的一部分。为了在会话中拥有自己的数据,请创建TIWUserSession并将其添加为会话的.data。在IWServerControllerBaseNewSession中,使用执行此操作
ASession.Data := TIWUserSession.Create(nil, ASession);
请注意,该过程的ASession参数是IW管理的会话。
为了访问您的TIWUserSession,请在ServerController:中创建一个过程
function UserSession: TIWUserSession;
begin
Result := TIWUserSession(WebApplication.Data);
end;
在接口部分公开该过程。
Dan
我突然想到我们可能在"解决错误的问题"。
您指出这是在实现登录表单时发生的。您还指出WServerControllerBaseNewSession()中的中断集没有命中。
在ServerController中,是否将"AuthBeforeNewSession"设置为True?如果是,请将其设置为False,并查看行为是否发生更改。
Dan