我遇到的问题类似于this other thread中的问题,我的想法很缺乏,所以我真的很感激任何帮助!
这是事情: 我们有一个使用会话变量的ASP应用程序,由于multitabs(IE8),它必须处理会话合并。
经过多次尝试后,我进行了以下实施:
我正在为客户端的每个浏览器的TAB设置一个ID(我正在使用sessionStorage)。
为了使它从服务器端可用(因为我找不到任何其他方式),我将其保存在cookie中并重新加载页面。
最后在我的ASP页面上,我从cookie中获取此ID并将其用作应用程序上所有会话变量的前缀。
这是一个简短的例子
Javascript(在每个asp文件的最开头插入)
LoadJs();
// Cookie and TabID handler
function LoadJs()
{
if (getInternetExplorerVersion() <= 6)
{
//alert("Exit..... old browser version : " + getInternetExplorerVersion());
return;
}
if (sessionStorage.TabID)
{
// Check value in cookie
var tabIdinCookie = readCookie("tabid");
// if ID in cookie not the same as ID in session update cookie and
// refresh the page to update values in server-side
if(!tabIdinCookie || (tabIdinCookie && tabIdinCookie != sessionStorage.TabID))
{
createCookie("tabid",sessionStorage.TabID);
ReloadPage();
}
}
else
{
// Create random ID
var currentTime = new Date();
sessionStorage.TabID = currentTime.getTime();
// Save ID to cookie
createCookie("tabid",sessionStorage.TabID);
createCookie("usingIE8",true,1);
// Refresh the page to make it available from server-side
ReloadPage();
}
return true;
}
// Redirect to the same page to refresh data at server-side
function ReloadPage()
{
window.location.reload(true);
}
然后,ASP代码:
<%
Dim Nm
Nm=""
response.Write("<br>Reading from cookie....")
if (Request.cookies("usingIE8") <> "" )then
if (Request.cookies("tabid") = "") then
'response.Write("<br>No cookie")
'response.flush()
' WHAT TO DO HERE ????
else
Response.Write("<br>Cookie FOUND<br>")
Nm = Request.cookies("tabid")
end if
end if
if (Session(Nm + "LogonTime")="") then
Response.Write("<br><b>Updating session</b><br>")
Session(Nm + "LogonTime") = Now
UpdateInDB(Session(Nm + "LogonTime"))
' Do other stuffs
end if
%GT;
我为最终解决问题而感到自豪,但我意识到当页面执行后期操作时,所有代码ASP都会呈现(使用错误的前缀ID)并在执行之前执行(包括数据库操作)可以在cookie上更新TabID,并且可以通过javascript重新加载页面。我的意思是我的所有页面代码都被执行了两次,一次在刷新之后再次执行......: - |
有没有人认为有可能像Response.End()一样实现smthg,以防止其余的代码ASP执行,如果我可以识别我必须刷新页面而不杀死javascript同时执行?或者在页面上的任何其他操作之前等待所有javascript执行?
我被困在这里,让我哭到必须停在这里!必须有一个解决方案...如果我能找到解决方案,它将被应用于许多ASP(3.0)应用程序,这些应用程序在至少3或5年之前不会升级到ASP.NET。
提前致谢,
答案 0 :(得分:0)
我不明白为什么你们都这样做但是我不会重新加载整个页面而是使用ajax来设置会话变量?
好的例如jquery:
// AJAX Request
$.post("session.asp", { act: "setSession", varName: "myVar", varValue: "myVal" },
function(data) {
alert("new Session value: " + data);
});
然后在session.asp:
if request.form("act") = "setSession" then
session(request.form("varName")) = request.form("varValue")
' now you have the new value in Session:
'
response.write Session("myVar")
end if
希望这会有所帮助