自己解决了:
800x600我使用了iw7.015自带的一个控件,很好用的,可以测客户端的屏幕。
至于问题0)在onclosesession 事件中写代码,判断是否结束session,如果结束则清除
用户的使用名,这样可以使用户不能使同一帐号登陆。大家参考如下:
使用的是delphi7 自带的iw5.043.(强烈推荐使用iw7.015,爽)
新建一intraweb的 StandAlone Application 工程,
1)在ServerController单元设置如下:
属性sessionTimeout=1 (便于调试)
unit ServerController;
{PUBDIST}
interface
uses
SysUtils, Classes, IWServerControllerBase,
// For OnNewSession Event
AspTlb,
IWApplication, IWAppForm;
type
TIWServerController = class(TIWServerControllerBase)
procedure IWServerControllerBaseNewSession(ASession: TIWApplication;
var VMainForm: TIWAppForm);
procedure IWServerControllerBaseCreate(Sender: TObject);
procedure IWServerControllerBaseDestroy(Sender: TObject);
procedure IWServerControllerBaseCloseSession(ASession: TIWApplication);
private
public
end;
// This is a class which you can add variables to that are specific to the user. Add variables
// to this class instead of creating global variables. This object can references by using:
// UserSession
// So if a variable named UserName of type string is added, it can be referenced by using:
// UserSession.UserName
// Such variables are similar to globals in a normal application, however these variables are
// specific to each user.
//
// See the IntraWeb Manual for more details.
TUserSession = class
public
username:string;
userpws:string;
end;
// Procs
function UserSession: TUserSession;
var
tslist1:TStringList;//使用全局变量,目的为存储所有session 。
implementation
{$R *.dfm}
uses
IWInit;
function UserSession: TUserSession;
begin
Result := TUserSession(RWebApplication.Data);
end;
procedure TIWServerController.IWServerControllerBaseNewSession(
ASession: TIWApplication; var VMainForm: TIWAppForm);
begin
ASession.Data := TUserSession.Create;
end;
procedure TIWServerController.IWServerControllerBaseCreate(
Sender: TObject);
begin
tslist1:=TStringList.Create ;
end;
procedure TIWServerController.IWServerControllerBaseDestroy(
Sender: TObject);
begin
tslist1.Free ;
end;
procedure TIWServerController.IWServerControllerBaseCloseSession(
ASession: TIWApplication);
var
ss,sa:string;
i:integer;
begin
sa:=usersession.username ;
for i := 0 to (tslist1.Count - 1) do
begin
ss:=tslist1.Strings;
if ss= sa then
begin
tslist1.Delete(i);//如果session 结束,则将该用户从列表中清除。
tslist1.SaveToFile('session.txt') ;//更新管理员查看用户在线登陆情况。
exit;
end;
end;
end;
end.
2)在formMain窗体添加iwedit1,iwbutton1,相关代码如下:
unit IWUnit1;
{PUBDIST}
interface
uses
IWAppForm, IWApplication, IWTypes, IWCompLabel, IWCompEdit, Classes,
SysUtils,
Controls, IWControl, IWCompButton;
type
TformMain = class(TIWAppForm)
IWButton1: TIWButton;
IWEdit1: TIWEdit;
procedure IWButton1Click(Sender: TObject);
public
end;
implementation
{$R *.dfm}
uses
ServerController;
procedure TformMain.IWButton1Click(Sender: TObject);
var
ss,sa:string;
i:integer;
begin
usersession.username :=iwedit1.Text ;
sa:=usersession.username ;
for i := 0 to (tslist1.Count - 1) do
begin
ss:=tslist1.Strings;
if ss= sa then
begin
webapplication.ShowMessage('该用户已经在线,请过几分钟在试。');
exit;
end;
end;
tslist1.Add(sa);//将用户帐号添加到全局变量中。
tslist1.SaveToFile('session.txt') ;//可供于管理员查看。
end;
end.
3)运行,在iwedit1中输入用户名,点击按钮,然后输入相同的用户名,再点击按钮,肯定
会提示的。
以上代码只是想让使用iw开发b/s 的朋友对session 及登陆问题起到一个抛砖引玉的作用,
其实我已经用iw7完成相当完整的代码,其中用户的AppID,用户ip,密码的检测,用户登陆信息,登陆时间,次数等问题都写到数据库中,这样便于管理员检测。不完美的是不能禁止用户关闭IE上的X,或者在关闭ie时结束不了session,只能等超时,唉.....
现在大富翁上的“老人”越来越少了。
郁闷。