intraweb下,点击IE的关闭按钮(即系统按钮的那个X)后,如何结束SESSION(此问题给900分)(300分)

  • 主题发起人 主题发起人 活化石
  • 开始时间 开始时间
to : yeskert1


还是要弹出新窗口


您再看看?
 
关于session的释放问题,再次调整如下:
将IWText1的内容修改成这样:
<script FOR=window EVENT=onunload>
var s='';
var w;
var f;
f=document.forms['SubmitForm'];
if (f==null) return;//防止循环发生
s='<html><body><form method="POST" name="SubmitForm1" action="'+f.action+'">';
s=s+'<input type="HIDDEN" name="IW_Action">';
s=s+'<input type="HIDDEN" name="IW_ActionParam">';
s=s+'</form></body></html>';
w=window.open('','');

w.document.write(s);
w.document.forms['SubmitForm1'].IW_Action.value='IWBUTTON1';
w.document.forms['SubmitForm1'].IW_ActionParam.value='';

w.document.forms['SubmitForm1'].submit();
//w.close();
</script>
以上代码能够适用于6.x前和后的版本!!!
其中,w.close();在intraweb6.x以后正确关闭窗口,在intraweb6.x之前的版本(我測的是5.0.43)不行,原因没有找到!因此还是弹出窗口。但不知5.1.x如何。
+++++++++
还有一个问题:如果用户直接点击按钮IWBUTTON1会怎样呢?这必然导致一个异常,因两次释放
session是不可能的。因此应该将IWBUTTON1隐藏掉!直接设置IWBUTTON1的visible=false是不行
的,因为这样它就会被忽略,包括它的代码不会执行。
应该设置它的ExtraTagParms,添加这样一行:style=visibility:hidden,这样客户端就看不到它了,但它的服务器端代码可以执行。
 
to 活化石,ww111222:
是否能解决问题?
如果有更好方法,贴在这里!
[:D]
 
可能快有解了,等这顿酒以后,11点以后,能出结果了.到时谈
 
我解决了,不过有点罗嗦。
iwtext 如下:
<SCRIPT FOR=window EVENT=onunload>
if (IWEDIT1IWCL.value=='')
{IWBUTTON1_onclick(SubmitForm.IWBUTTON1);
alert('bye');
}
</SCRIPT>
在页面上放了个IWEDIT1,初始为空。目的是:如果值为空说明用户没有点击页面上
的相关按扭或链接。当用户点击页面上的相关按扭或链接时,写客户端动作使
IWEDIT1的值不为空,如果是菜单则判断鼠标事件,大体控件属性为:

IWedit1.width:=0;//隐藏Iwedit

/////// IWButton2
procedure TIWForm1.IWButton2Click(Sender: TObject);
begin
webapplication.ActiveForm.Free;
TIWForm2.Create(webapplication).Show ;
end;

ScriptEvents--->onClick

IWEDIT1IWCL.value='ok';
return SubmitClickConfirm('IWBUTTON2','', true, '');

/////////////TIWMainMenu1/////////
ExtraTagParams-->
onMouseOver=IWEDIT1IWCL.value='ok';
onMouseOut=IWEDIT1IWCL.value='';


虽然麻烦了些,不过问题基本解决,还望各位有更好的方法。

 
老Y的代码最关键的地方是让我们重拾可以随时关闭SESSION的自信
但ONUNLOD恐怕在什么版本下的INTRAWEB都很难理想的实现,不如转移到
onbeforeunload也许是解决问题的一个思路,不胜酒力.我的思路是始终在关闭窗体后
以查询参数的形式(可加密)传递到WEB服务器,然后MOVE此SESSION,就相当与,关闭时又开了一个SESSION,但通过传递来的参数,同时关闭前一个,以及当前的SESSION,来节约资源.
 
老Y的代码我在7.021 下试了下,窗口到是能关闭了,但session 有时能结束,有时不能
结束。奇怪?
 
感谢各位.但几天来得出最后的结论是,此题暂无解.
我们来看几种关闭IE的操作方法
1.打开IE(如登陆界面或进入后),置之不理,静等SESSION自然消亡
2.ALT+F4 (这个可能屏蔽,见过此类代码)
3.点击右上角的X,现在我们讨论的
4.点击系统按钮后,选择关闭
5.在任务栏用右键关闭
6.文件->关闭
7.其他如:ctrl+alt+del关闭
其中据我所知4、5情况下,ONUNLOAD都无法执行,而最绝的是1
而ONUNLOAD事件在页面,跳转,刷新,关闭下都触发,可能最后造成因噎废食.
这是我们在INTRAWEB下遇到的问题,同样也适用与ASP..等其WEB开发方式,但都没有太尽善的答案,所以说,要解决的话基本上来说很难.看来当初有很大的乐观成份.因为IE不是我们自己创造的应用程序.但解决这个问题的过程,让我很感动,大富翁任就是以前的大富翁.当然,各位不妨谈谈自己的看法,此300分过二天就结.
 
但99%的用户关闭ie 选择 3.点击右上角的X,现在我们讨论的。
能够结束session,对用户来说还是比较文明的,唉,怪就怪我们从事了
这个行业,累脑的。
 
活化石说的没错,我们有很多解决不了或者没有完美解决方案的问题。
slxiao112说“有时”不能结束session,如果这样这确实不好理解!

[:D]我回去好好练功!

 
终于搞定。
IntraWeb 7.021

窗体上放iwedit1,iwbutton1.
iwbutton1 事件:
procedure TIWForm1.IWButton1Click(Sender: TObject);
begin
webapplication.Terminate();
end;

我在iwform1 的javascript 属性中添加了如下代码:

var mousexy;
function test()
{
mousexy=event.y;
}

iwtext1 的lines 如下:

<SCRIPT FOR=window EVENT=onunload>
if (mousexy <=20 )
{IWBUTTON1_onclick(SubmitForm.IWBUTTON1);
alert('bye');
}
</SCRIPT>
<body onmousemove="test()";></body>

昨天以为<body onmousemove="test()";></body> 出了问题,其实是onunload的问题,
任何按扭、链接、菜单等事件都能引起onunload 事件,所以不触发就ok 了。

用户鼠标的位置大家可自定。
 

to:slxiao112


为什么我把 alert('bye');去掉就不行了?
 
等我试试.然后发分.
 
关注下我的这个,谢谢。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2590587
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
605
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部