如果你有一些Web编程经验,就会知道会话期管理是一个复杂的话题。IntraWeb提供预定义的会话期管理并且简化使用会话期的方法。如果在一个指定的窗体中需要会话数据,需要做的是给该窗体加一个域。IntraWeb窗体和组件会为每一个会话期创建一个实例。比如,在例程IWSession中,我给窗体添加一个域叫做FormCount,为了对比,我又在全局单元里声明一个全局变量GlobalCount,这个变量会被程序的所有实例所共享。
为了加强对会话数据的控制同时让多个窗体共享它,可以定制TuserSession类,该类是IntraWeb应用程序向导在ServerController单元中自动产生的。在例程IWSession中,我是这样定制的:
type TUserSession = class public UserCount: Integer; end;
IntraWeb 为每个新的会话期创建对象的实例,参阅ServerController单元中TIWServerController类的IWServerControllerBaseNewSession方法:
procedure TIWServerController.IWServerControllerBaseNewSession(
ASession: TIWApplication; var VMainForm: TIWAppForm);begin ASession.Data := TUserSession.Create;end;
在代码中,会话期对象可以通过访问RwebApplication这个全局变量的Data域来引用,这个变量通常用来访问当前用户的会话期。
提示:RwebApplication是线程变量,在IWInit单元中定义。她提供了访问会话期数据的线程安全方法:在多线程环境下访问它需要倍加小心。该变量可以在窗体和控件之外使用(基于线程的),这就是为什么主要用在数据模块、全局程序和非IntraWeb类内的原因。
此外,默认的ServerController单元提供一个可用的辅助函数:
function UserSession: TUserSession;
begin Result := TUserSession(RWebApplication.Data);end;
因为大多数代码已经自动产生了,像下面从例程IWSession中提取的代码那样,只需给TuserSession类添加数据,就可用通过UserSession函数简单地应用了。在例程中,单击按钮,程序会累加几个计数器(一个全局变量,两个会话期指定的)并通过标签显示它们的值:
procedure TformMain.IWButton1Click(Sender: TObject);
begin InterlockedIncrement (GlobalCount); Inc (FormCount); Inc (UserSession.UserCount); IWLabel1.Text := ''''Global: '''' IntToStr (GlobalCount); IWLabel2.Text := ''''Form: '''' IntToStr (FormCount);
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




