【转】UniGUI Session管理說明
(2015-12-29 15:41:15)
分类: uniGUI |
台中cmj朋友在uniGUI中文社区QQ群里发布的,转贴至此。
UniGUI Session管理說明
每一個Session對應一個UniMainModule,一個MainForm
因此Session+UniMainModule就可以得到所有Session+使用者的資料
以做管理之用
[UniServerModule]
Public區定義
UserList:TList; //登入Session List
//事件
procedure TUniServerModule.UniGUIServerModuleCreate(Sender: TObject);
begin
UserList:=UniServerModule.SessionManager.Sessions.SessionList;
end;
//---------------------------------------------------------------------------------
[UniMainModule]
Public //定義,由設計者自行決
UserID:String; //登入使用者ID
LoginTime:TDateTime; //登入時間
Msg:String; //做Session間訊息傳遞
BrowserType:String; //Session之瀏覽器類別
BrowserVersion:integer; //Session之瀏覽器版本
OSType:String;
IsMobile:Boolean; //Session是否Mobile
RType:Integer; //OnHandleRequest執行類別
//事件,此處可處理Session間的訊息
//只要使用者在瀏覽器有動作,會觸發本事件
//UniGUI的Session接受其他Session的訊息,無法主動顯示,
procedure TUniMainModule.UniGUIMainModuleHandleRequest(ASession: TObject;var Handled: Boolean);
var Session:TUniGUISession;
MF:TMainForm;
begin
Session:=TUniGUISession(ASession);
MF:=TMainForm( Session.UniMainModule.MainForm ); //Session對應的MainForm
case Self.RType of
1:begin
MF.UniLabel1.Caption:=‘TEST訊息‘; //
Session.ShowAlert(‘OK‘);
end;
2:begin
end;
3:begin
end;
end;
Self.RType:=-1; //
end;
//---------------------------------------------------------------------------------
[LoginForm]
//事件,設定Session沒定義的資料
procedure TLoginForm.BtnLoginClick(Sender: TObject);
var ok:Boolean;
C:TUniClientInfoRec; //uniGUIApplication.pas
m:TuniMainModule;
begin
m:=UniMainModule; //
//--處理可否登錄 Ok=True可登入
m.UserID:=Self.EdUser.Text; //UserID在Session沒有,是自行加入
C:=UniApplication.ClientInfoRec;
m.SessionID:=UniSession.SessionID;
m.LoginTime:=Now;
m.BrowserType:=C.BrowserType;
m.BrowserVersion:=C.BrowserVersion;
m.OSType:=C.OSType;
m.IsMobile:=UniSession.IsMobile;
Ok:=True; //自行決定如此處理Ok
//記錄登入使用者處理
if Ok then
begin
ModalResult:=mrOK; // Login is valid so proceed to MainForm ,執行段 Login form會Destory
end;
end;
//---------------------------------------------------------------------------------
[MainForm]
//事件,列出Session一覽表
procedure TMainForm.UniButton7Click(Sender: TObject);
var i:integer;
Session:TUniGUISession;
m:TUniMainModule; //Session對應的UniMainModule
begin
Self.PageControl.ActivePageIndex:=0;
Self.MLog.Clear;
for i:=0 to UniServerModule.UserList.Count-1 do
begin
Session:= TUniGUISession( UniServerModule.UserList[i]);
m:=TUniMainModule(Session.UniMainModule);
Self.MLog.Lines.Add( Session.SessionId +‘,‘+
m.UserID +‘,‘+
FormatDateTime(‘yyyy.mm.dd-hh:nn:ss.zzz‘,LoginTime:TDateTime; )+‘,‘+
m.BrowserType+‘,‘+
inttostr(m.BrowserVersion)+‘,‘+
m.OSType+‘,‘+
inttostr(ord(m.IsMobile))
);
end;
end;