ASP.NET APPLICATION要使用原來的ASP使用者系統,於是問題出現了,ASP APPLICATION怎樣才能讓使用者登入的狀態及使用者資訊在ASP.NET中依然有效呢。於是我們考慮用構造FORM來自動認可傳遞ASP應用中的Session變數。
例子如下
ASP應用URL為
http://127.0.0.1/asp/,並在ASP.NET應用中的web.config設定
<!--設定ASP應用的URL-->
<add key="aspURL" value="
http://127.0.0.1/asp/" />
在ASP應用中增加兩個ASP頁面system.asp和autoPostForm.asp
<!--system.asp-->
<%
Session("UID")="user"
session("isPass")="ok"
Server.Transfer("autoPostForm.asp")
%>
<!--autoPostForm.asp-->
<%
Response.Write("<form name=t id=t action=""http://127.0.0.1/aspdotnet/getSession.aspx""
method=post >")
Response.Write("<input type=hidden name=UID" )
Response.Write( " value=" & Session("UID") & " >")
Response.Write("<input type=hidden name=isPass" )
Response.Write( " value=" & Session("isPass") & " >")
Response.Write("</form>")
Response.Write("<script>t.submit();</script>")
%>
在ASP.net應用中用頁面getSession.aspx來接受傳遞過來的Session變數值
getSession.aspx.cs程式碼片段:
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
string aspurl=ConfigurationSettings.AppSettings["aspURL"].Trim();
try
{
string fromurl=Request.ServerVariables["HTTP_REFERER"];
//驗證是否從asp應用中提交過來
if(fromurl.StartsWith(aspurl))
{
string uid=Request["UID"].ToString();
string state=Request["isPass"].ToString();
if(uid!="" && state=="ok")
{
//表明使用者在asp系統中已登入成功
}
}
else
{
Response.Write("<script>alert('非法使用者或未登入使用者');top.location.href='" + aspurl +
"';</script>");
}
}
catch
{
Response.Redirect(aspurl);
}
}
}
當然,上述例子只是為解決特定的問題,如果要寫成通用的,則需要做如下修改
就在autoPostForm.asp使用
For each sItem in Session.Contents
Response.Write("<input type=hidden name=" & sItem)
Response.Write( " value=" & Session.Contents(sitem) & " >")
next
而在getSession.aspx頁面用下面的代碼來接受並用同名Session變數儲存
for(int i=0;i<Request.Form.Count;i++)
{
Session[Request.Form.GetKey(i)]=Request.Form[i].ToString();
}