如何将 ASP 页面和查询集成到 iOS 应用程序中?
How can I integrate ASP pages and queries into an iOS app?
我现在有一个相当令人费解的场景,即弄清楚如何将几个大型查询(每个查询有许多不同的项目)集成到一个 iOS 与基于 C# 的 REST API 通信的应用程序中].我正在尝试在应用程序中提取多个报告,如果我在 API 中重新创建所有这些查询以及在 iOS 中重新创建界面,它可能相当 time-consuming。访问报告的页面是一个经典的 ASP 页面,并包含一个安全性 header 以确保用户 session 已通过登录页面进行验证。有没有办法将其设置为 UIWebView 并以某种方式在加载 UIWebView 时验证 session?否则将是一个漫长而艰巨的过程。
用户使用 NSURLRequest 登录到 UIWebView 后,cookie 是否可能被传输过来?
每个页面都有代码来检查 session 是否已通过身份验证
<%
if Session("portallogin") <> "good" then
response.redirect("example.com")
end if
%>
这里是一些负责初始认证的相关登录代码
'Get the username and password sent as well as user ip
On Error resume next
Session("login") = "bad" 'init to bad
sent_username = Request("username")
sent_password = Request("password")
source = Request.form("source")
remember_me = Request("remember_me")
userip = Request.ServerVariables("REMOTE_ADDR")
sent_username = replace(sent_username,"'","'")
sent_username = protectval(sent_username)
sent_password = protectval(sent_password)
if rs.BOF and rs.EOF then
Session("login") = "bad"
response.cookies("user")("name") = ""
response.Cookies("user")("pword") = ""
else
arr = rs.GetRows()
password = arr(0,0)
memberid = arr(1,0)
expired = arr(2,0)
if sent_password = password then
Session("login") = "good"
if expired = "True" Then
%>
'''''''''''''''''''
if session is good
'''''''''''''''''''
Session("username") = sent_username
Session("maintuser") = sent_username
Session("b2buser") = sent_username
Session("password") = sent_password
Session("memberid") = memberid
Session("customernumber") = customernumber
Session("cno") = cno
Session("login") = "good"
if remember_me = "on" Then
response.cookies("entry")("doorway") = cook(sent_username)
response.Cookies("entry")("michael") = cook(sent_password)
response.Cookies("entry")("remember_me") = cook("CHECKED")
Response.Cookies("entry").Expires = Now() + 365
else
response.cookies("entry")("doorway") = ""
response.Cookies("entry")("michael") = ""
response.Cookies("entry")("remember_me") = ""
Response.Cookies("entry").Expires = Now() + 5
end if
由于大多数参数都引用请求集合,您可以将参数放在查询字符串中,从而使它们成为 UIWebView 基础 url 的一部分。所以你的 URL 请求看起来像
file.asp?username=xxx&password=yyy&source=zzz&remember_me=on
您需要将示例文件中的第 7 行更改为
source = Request("source")
但它仍然适用于现有请求。
此代码的明显问题是您的应用程序中存储了用户名和密码,这可能会被拦截和滥用。所以要注意这一点。我不推荐这种方法。
更好的解决方案是考虑重写登录函数以在数据库中存储临时 GUID 和时间戳,然后可以将其作为查询字符串的一部分传递到请求中。然后可以修改您的身份验证代码以检查该 GUID 是否有效并更新与 GUID 相关联的时间戳(或者检查会话是否使用该页面的旧访问方法)。
我现在有一个相当令人费解的场景,即弄清楚如何将几个大型查询(每个查询有许多不同的项目)集成到一个 iOS 与基于 C# 的 REST API 通信的应用程序中].我正在尝试在应用程序中提取多个报告,如果我在 API 中重新创建所有这些查询以及在 iOS 中重新创建界面,它可能相当 time-consuming。访问报告的页面是一个经典的 ASP 页面,并包含一个安全性 header 以确保用户 session 已通过登录页面进行验证。有没有办法将其设置为 UIWebView 并以某种方式在加载 UIWebView 时验证 session?否则将是一个漫长而艰巨的过程。
用户使用 NSURLRequest 登录到 UIWebView 后,cookie 是否可能被传输过来?
每个页面都有代码来检查 session 是否已通过身份验证
<%
if Session("portallogin") <> "good" then
response.redirect("example.com")
end if
%>
这里是一些负责初始认证的相关登录代码
'Get the username and password sent as well as user ip
On Error resume next
Session("login") = "bad" 'init to bad
sent_username = Request("username")
sent_password = Request("password")
source = Request.form("source")
remember_me = Request("remember_me")
userip = Request.ServerVariables("REMOTE_ADDR")
sent_username = replace(sent_username,"'","'")
sent_username = protectval(sent_username)
sent_password = protectval(sent_password)
if rs.BOF and rs.EOF then
Session("login") = "bad"
response.cookies("user")("name") = ""
response.Cookies("user")("pword") = ""
else
arr = rs.GetRows()
password = arr(0,0)
memberid = arr(1,0)
expired = arr(2,0)
if sent_password = password then
Session("login") = "good"
if expired = "True" Then
%>
'''''''''''''''''''
if session is good
'''''''''''''''''''
Session("username") = sent_username
Session("maintuser") = sent_username
Session("b2buser") = sent_username
Session("password") = sent_password
Session("memberid") = memberid
Session("customernumber") = customernumber
Session("cno") = cno
Session("login") = "good"
if remember_me = "on" Then
response.cookies("entry")("doorway") = cook(sent_username)
response.Cookies("entry")("michael") = cook(sent_password)
response.Cookies("entry")("remember_me") = cook("CHECKED")
Response.Cookies("entry").Expires = Now() + 365
else
response.cookies("entry")("doorway") = ""
response.Cookies("entry")("michael") = ""
response.Cookies("entry")("remember_me") = ""
Response.Cookies("entry").Expires = Now() + 5
end if
由于大多数参数都引用请求集合,您可以将参数放在查询字符串中,从而使它们成为 UIWebView 基础 url 的一部分。所以你的 URL 请求看起来像
file.asp?username=xxx&password=yyy&source=zzz&remember_me=on
您需要将示例文件中的第 7 行更改为
source = Request("source")
但它仍然适用于现有请求。
此代码的明显问题是您的应用程序中存储了用户名和密码,这可能会被拦截和滥用。所以要注意这一点。我不推荐这种方法。
更好的解决方案是考虑重写登录函数以在数据库中存储临时 GUID 和时间戳,然后可以将其作为查询字符串的一部分传递到请求中。然后可以修改您的身份验证代码以检查该 GUID 是否有效并更新与 GUID 相关联的时间戳(或者检查会话是否使用该页面的旧访问方法)。