IE中用window.open() 新开页面,有时会丢失Session 的问题。

博客主要讲述IE中用window.open()新开页面时,会出现丢失Session和Authentication(用户验证信息)的问题,原因是“Browse In New Process”,某些情况下打开新进程信息未同步。还介绍了在Win2003中的设置演示及测试情况,解决方法是及时打补丁。

IE中用window.open() 新开页面,有时会丢失Session 的问题。

有关这个问题的详细描述,请参看:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;196383

我摘要如下:

其实不仅仅是丢失Session的问题,Authentication (用户验证信息)也会丢失。
这个问题出现的原因是因为 :
"Browse In New Process."   某些情况下,你打开IE的一个新进程,这些信息没有被同步过去。
解决方法当然是老套的及时打补丁。

上述文中,通过设置"Browse In New Process." 演示了这个问题。
在Win2003中,这个设置不在IE的 Internet 选项 -- 高级中(Win2003 IE6 中找不到这个设置),
而在资源管理器的 -- 文件夹选项 -- 查看 -- 在单独的进程中打开文件夹窗口。
如下图的设置:

演示IE丢失Session用图一 

设置好后,你在资源管理器中输入演示的ASP文件,(注意是资源管理器,不是IE)。点击 WindowOpen 按钮,你就有一定的概率,看到新开的页面跟原来的页面不是同一个Session。

以上演示是在升级了微软所有已知补丁后的Win2003上作的测试,如果是没打过补丁的版本,可能概率更高,我没有测试过。

演示用到的ASP文件,上面提到的URL中给出了,就不再重复。


 

可以, 请在login Z2L 精简版本后拼接下方代码, 要求 顺利运行事务代码MB51 并replace GRRMPM.XLSX 打GRRMPM.xlsx文件后打MPS25 xlsx, 进行相应的数据更; 数据更后关闭GRRMPM, 关闭SAP Sub RunSAPTransactionAndProcessExcel_NoExternalFormula() Dim SapGui As Object, App As Object, Conn As Object, Session As Object Dim wbMPS As Workbook, wsBOH As Worksheet Dim wbSAP As Workbook, wsSAP As Worksheet Dim searchString As String, rng As Range, cell As Range Dim rowNumber As Long, i As Long Dim exportPath As String, exportFile As String Dim appWorkbookCount As Long On Error GoTo ErrHandler ' === Performance Settings === Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Application.EnableEvents = False ' === Dynamic Export Path === exportPath = Environ("USERPROFILE") & "\OneDrive - BASF\Desktop" exportFile = "GRRMPM.XLSX" ' === Attach to SAP GUI === Set SapGui = GetObject("SAPGUI") Set App = SapGui.GetScriptingEngine Set Conn = App.Children(0) Set Session = Conn.Children(0) ' === Start SAP Transaction === Session.StartTransaction "MB51" Session.FindById("wnd[0]/tbar[1]/btn[17]").Press Session.FindById("wnd[1]/tbar[0]/btn[6]").Press Session.FindById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").CurrentCellRow = 2 Session.FindById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").SelectedRows = "2" Session.FindById("wnd[1]/usr/cntlALV_CONTAINER_1/shellcont/shell").DoubleClickCurrentCell Session.FindById("wnd[0]/tbar[1]/btn[8]").Press Session.FindById("wnd[0]/tbar[1]/btn[48]").Press Session.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell").CurrentCellColumn = "MAKTX" Session.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell").SelectedRows = "0" Session.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell").ContextMenu Session.FindById("wnd[0]/usr/cntlGRID1/shellcont/shell").SelectContextMenuItem "&XXL" ' === Export to Excel === Session.FindById("wnd[1]/tbar[0]/btn[0]").Press Session.FindById("wnd[1]/usr/ctxtDY_PATH").Text = exportPath Session.FindById("wnd[1]/usr/ctxtDY_FILENAME").Text = exportFile Session.FindById("wnd[1]/tbar[0]/btn[11]").Press ' === Wait for Export Completion === appWorkbookCount = Application.Workbooks.Count Do DoEvents Loop While Application.Workbooks.Count = appWorkbookCount ' === Open Both Files === Set wbSAP = Workbooks.Open(exportPath & "\" & exportFile) Set wbMPS = Workbooks.Open(exportPath & "\MPS25.XLSX") Set wsSAP = wbSAP.Sheets(1) Set wsBOH = wbMPS.Sheets("BOH") ' === Find SAPdataend Row === searchString = "SAPdataend" Set rng = wsBOH.Columns("A:A") Set cell = rng.Find(What:=searchString, LookIn:=xlValues, LookAt:=xlWhole) If Not cell Is Nothing Then rowNumber = cell.Row - 1 Else MsgBox "Marker 'SAPdataend' not found!", vbExclamation GoTo Cleanup End If ' === Calculate SUMIF in VBA === Dim SAPRangeCriteria As Range, SAPRangeValues As Range Set SAPRangeCriteria = wsSAP.Columns(5) ' Column E Set SAPRangeValues = wsSAP.Columns(7) ' Column G For i = 2 To rowNumber wsBOH.Cells(i, "K").Value = _ Application.WorksheetFunction.SumIf(SAPRangeCriteria, wsBOH.Cells(i, "A").Value, SAPRangeValues) / 2 Next i Cleanup: ' === Restore Settings === Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Application.EnableEvents = True Exit Sub ErrHandler: MsgBox "Error: " & Err.Description, vbCritical Resume Cleanup End Sub
最新发布
11-19
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值