UniGUI Session管理說明

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;

相关推荐
陆少枫6 分钟前
MySQL基础关键_013_常用 DBA 命令
数据库·mysql
赵渝强老师21 分钟前
【赵渝强老师】在PostgreSQL中使用file_fdw访问外部文件系统
数据库·postgresql
智_永无止境34 分钟前
Redis 8.0携新功能,重新开源
数据库·redis·开源
阿乾之铭1 小时前
Spring Boot 参数验证
java·数据库·mysql
唐人街都是苦瓜脸2 小时前
MySQL创建了一个索引表,如何来验证这个索引表是否使用了呢?
数据库·mysql
前进的程序员2 小时前
SQLite 数据库常见问题及解决方法
数据库·sqlite
zhcong_2 小时前
MySQL数据库操作
数据库·mysql
极小狐4 小时前
极狐GitLab 容器镜像仓库功能介绍
java·前端·数据库·npm·gitlab
极小狐4 小时前
如何构建容器镜像并将其推送到极狐GitLab容器镜像库?
开发语言·数据库·机器学习·gitlab·ruby
阿四啊4 小时前
【Redis实战篇】分布式锁-Redisson
数据库·redis·分布式