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;

相关推荐
m***923818 分钟前
【SQL】MySQL中的字符串处理函数:concat 函数拼接字符串,COALESCE函数处理NULL字符串
数据库·sql·mysql
!停32 分钟前
VS实用调试技巧
数据库
8***23551 小时前
在Django中安装、配置、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的功能
数据库·django·sqlite
Token_w2 小时前
openGauss:全密态数据库的金融级安全实践
数据库·安全·金融
合作小小程序员小小店2 小时前
图书管理系统,基于winform+sql sever,开发语言c#,数据库mysql
开发语言·数据库·sql·microsoft·c#
ss2732 小时前
020:共享锁深度解析:从AQS原理到高并发实践
数据库·redis·缓存
字节拾光录3 小时前
手机号存储避坑指南:从20亿级数据库实践看,为什么VARCHAR才是终极答案
java·数据库·oracle
q***46526 小时前
Win10下安装 Redis
数据库·redis·缓存
p***92488 小时前
深入理解与实战SQL IFNULL()函数
数据库·sql·oracle
q***816410 小时前
MySQL:数据查询-limit
数据库·mysql