又改题目了,希望能对使用intraweb开发web的朋友们有所帮助,过几天解帖。 (100分)

  • 主题发起人 主题发起人 slxiao112
  • 开始时间 开始时间
S

slxiao112

Unregistered / Unconfirmed
GUEST, unregistred user!
0[red])假如现在有用户“123”已经登陆,“123”用户关闭ie 后离开,超时后session 自动解除。
那么通过代码如何知道“123”已经自动解除了呢?
我想在它自动解除后写一些语句。[/red]????????


1)因为IntraWeb的App模式不是多窗体的,所以如何禁止用户关闭IE上的X,
如何在关闭ie时结束session.

关于:intraweb的session管理
http://www.delphibbs.com/keylife/iblog_show.asp?xid=4047
不好使。

如何写代码?

2)如何让窗体固定为800x600,或者怎样检测窗体的分辨率是否为800x600

3)我用IntraWeb7.015建了一网站,要求职员可将“文字材料、报表”等文件能上传到
网站(服务器),我该如何写代码?(公网)
谢谢了。
 
Demo 里面的 Features ,有个FileUploadForm就是
 
找找..............
 
问题3解决,如斑竹所说
问题2,想到了一个方法,应该能行。

问题1 如何解决呢?

 
能说说2的思路么?

1是没有必要,IntraWeb的App模式你设置Timeouet就可以了,到时间自己清除的,这个和asp程序一样想自己控制几乎没有办法,。
 
to 斑竹:
1:因为IntraWeb的App模式不是多窗体的,所以用户往往习惯关闭IE上的X,但这样用户还得重新登陆(麻烦),我是想禁止用户关闭ie上的X,然后提示用户点击“返回”或“退出”按钮。如果用户总是不停的登陆,那么session 也就不断的类加,这样真正的在线数就不真实了,所以我才想:要么禁止用户关闭ie上的X,要么在关闭ie时结束session。

2:检测屏幕的分辨率,不是800X600的就不启动程序了,哎,没办法。
 
1.禁止用户关闭ie上的X 这个思路肯定行不通,否则它就不是IntraWeb而是黑客软件了,呵呵。

2.我就是想知道你是如何检测客户的分辨率的
 


我也用IW 做了一个 系统

session我设置成600,不管它,如果客户关闭再 打开,就再个session


800*600 我是在网站的首页上 写了个 java 指定开新窗口为 800*600


这是代码:


<html>

<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>测试DELPHI7 IntraWeb 程序入口</title>


<script LANGUAGE="JavaScript">
<!--
function openwin() {
window.open ("http://foxbb:8080", "newwindow", "top=0,left=0, height=550,width=790,toolbar=no, menubar=no, resizable=yes,scrollbars=yes, location=no, status=no")
//写成一行
}
//-->
</script>






</head>

<body bgcolor="#E0EEF5">

<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<h1 align="center"><a href="#" onclick="openwin()">国税系统电子定税系统入口>>>>></a></h1>





</body>







</html>


 
自己解决了:
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,只能等超时,唉.....

现在大富翁上的“老人”越来越少了。
郁闷。



 
对了,给斑竹80,ww111222 20
谢谢你们。
 
ww111222的方法相当于在IW之外单做一个网页紧提供入口,不太舒服

不好意思,哪个控件可以测客户端的屏幕?我也装个7。015看看

 
来晚了
这几天学java去了,
楼主的的第一个问题的解决办法不是上策,
我觉得你还是好好看看
http://www.delphibbs.com/keylife/iblog_show.asp?xid=4047
这个帖子,
我就是按照他给出的方法,
实现的IE关闭时,自动结束session,
我有一例子里这一程序,要的话
请chenshaizi@163.com
 
“哪个控件可以测客户端的屏幕?”
iwTMS,iw的控件板上有,图标是个显示屏幕。
iw7 最好破解,否则为评估版
www.51delphi.com 有下载,含破解。

要想使用企业版不能只简单的输入key,而是用hex 编辑器修改:
7.019 hack

TMS和arcana的破解如下
修改以下文件查找017313A1替换成017313C3,共有个文件
/Arcana/IWControl/LibD7/ArcIWControlBase.dcu
/Arcana/IWDialogs/LibD7/ArcIWDlgBase.dcu
/Arcana/IWEnhanced/LibD7/ArcIWEnhancedInterface.dcu
/Arcana/IWGraphs/LibD7/ArcIWGraphsBar.dcu
/Arcana/IWLanguage/LibD7/ArcIWTranslatorBase.dcu
/TMS/LibD7/IWTMSBase.dcu
/TMS/LibD7/IWWebGrid.dcu
/TMS/LibD7/IWWebPlanner

IW的破解如下 修改IWKlooch.dcu 文件
查找B3018D45替换成B3048D45,共有1处
下面的解释:如把B3018D45替换成以下“//”后面的16进制
00是ltUnknown// B3008D45不能设置IP和端口
01是ltEval,// B3018D45不能设置IP和端口
02是ltPersonal// B3028D45个人版
03是ltDeveloper// B3038D45开发版
04是ltEnterprise// B3048D45 企业版功能最强大
05是ltPackagedEnterprise//B3058D45企业开发包版
06是ltPackagedPage// B3068D45 页模式


 
to slxiao112

iwTMS,iw的控件板上有,图标是个显示屏幕。
没找到 那个控件,名称是什么?
 
关于session的问题有变通的方法解决,不必等 timeout
方法:
新建一app工程,窗体上放置 一iwbutton,响应click事件
procedure TIWForm2.IWButton1Click(Sender: TObject);
begin
webapplication.Terminate();
end;
窗体上放置iwtext,写入javascrip,在window 的onunload事件中写入调用此buttonclick事件的代码[:D]
 
这里是iwtext的line属性中的内容:
Lines.Strings = (
'<SCRIPT FOR=window EVENT=onunload> '
'SubmitForm.IWBUTTON1.value="Exit";'
'IWBUTTON1_onclick();'
'alert('#39'Exit'#39');'
'</SCRIPT> ')
另外RawText属性要设置为True。
 
是 iwArc.......,iw7的控件板上有,D7自带的iw5没有,
图标是个显示屏幕。
iw7,www.51delphi.com 有下载
 
其实我上面的代码是解决用户登陆的问题。

to killyoou:
试了,还是不行,关闭ie后,Active Session 还是为1,不是0
我的系统是xp。

按语句上看,应该没问题的,错在哪里了呢?

 


我也一样 不能关闭session
 
to slxiao112:
老兄,我费了半天劲,总算有了结果,将代码改成下面这样:
<script FOR=window EVENT=onunload>
var s='';
var w;
SubmitForm.IW_Action.value='IWBUTTON1';
SubmitForm.IW_ActionParam.value='';
s='<html><body>'+document.forms['SubmitForm'].outerHTML+'</body></html>';
w=window.open('','');
w.document.write(s);
w.document.forms['SubmitForm'].submit();
w.document.forms['SubmitForm'].close();

</script>
我也修改了我的笔记,比这详细一点点。
有问题再讨论!
别忘了给分![^]
 
后退
顶部